#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T qmin(const T &a, const T &b) {
  return a < b ? a : b;
}
template <typename T>
inline T qmax(const T &a, const T &b) {
  return a > b ? a : b;
}
template <typename T>
inline void getmin(T &a, const T &b) {
  if (a > b) a = b;
}
template <typename T>
inline void getmax(T &a, const T &b) {
  if (a < b) a = b;
}
inline void fileio(string s) {
  freopen((s + ".in").c_str(), "r", stdin);
  freopen((s + ".out").c_str(), "w", stdout);
}
const int inf = (int)1e9 + 7;
const long long linf = (long long)1e17 + 7;
const int N = 2e5 + 7;
struct vec {
  long long x, y;
  inline vec(const long long &_x = 0, const long long &_y = 0) : x(_x), y(_y) {}
  inline vec operator+(const vec &b) { return vec(x + b.x, y + b.y); }
  inline vec operator-(const vec &b) { return vec(x - b.x, y - b.y); }
  inline long long dot(const vec &b) { return x * b.x + y * b.y; }
  inline long long det(const vec &b) { return x * b.y - y * b.x; }
} a[N];
long long val[N];
int n;
double ans = 1e18;
inline void calc() {
  for (register int i = (n + 1); i <= (n << 1); ++i) a[i] = a[i - n];
  for (register int i = (2); i <= (n << 1); ++i) val[i] = a[i].det(a[i - 1]);
  for (register int i = (2); i <= (n << 1); ++i) val[i] += val[i - 1];
  int lst = 2;
  for (register int i = (1); i <= (n); ++i) {
    vec v1 = a[i + 1] - a[i];
    long long cur = v1.dot(a[lst] - a[i]), tmp;
    double len = (double)((a[i + 1].x - a[i].x) * (a[i + 1].x - a[i].x)) +
                 (double)((a[i + 1].y - a[i].y) * (a[i + 1].y - a[i].y));
    while (lst < (n << 1) && (tmp = v1.dot(a[lst + 1] - a[i])) >= cur)
      cur = tmp, ++lst;
    getmin(ans, cur / len * fabs(v1.det(a[lst] - a[i])) -
                    fabs(val[lst] - val[i] + a[i].det(a[lst])));
  }
}
int main() {
  scanf("%d", &n);
  for (register int i = (1); i <= (n); ++i) scanf("%lld%lld", &a[i].x, &a[i].y);
  ans = 1e18;
  calc();
  reverse(a + 1, a + n + 1);
  calc();
  printf("%.10lf\n", ans / 2);
  return 0;
}
