#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3fffffff;
const int SINF = 0x7fffffff;
const long long LINF = 0x3fffffffffffffff;
const long long SLINF = 0x7fffffffffffffff;
const int MAXN = 100007;
const long double PI = acos(-1.0);
const long double EPS = 1e-9;
long double adj(long double x) {
  if (x < -EPS) x += 2 * PI;
  if (x > 2 * PI - EPS) x -= 2 * PI;
  return x;
}
struct pT {
  pT() : x(0), y(0) {}
  pT(int _x, int _y) : x(_x), y(_y) {}
  pT operator+(const pT &a) const { return pT(x + a.x, y + a.y); }
  pT operator-(const pT &a) const { return pT(x - a.x, y - a.y); }
  pT operator*(int a) const { return pT(x * a, y * a); }
  pT operator/(int a) const { return pT(x / a, y / a); }
  long long operator*(const pT &a) const {
    return static_cast<long long>(x) * a.x + static_cast<long long>(y) * a.y;
  }
  long long operator^(const pT &a) const {
    return static_cast<long long>(x) * a.y - static_cast<long long>(y) * a.x;
  }
  bool operator==(const pT &a) const { return x == a.x && y == a.y; }
  bool operator!=(const pT &a) const { return (x ^ a.x) || (y ^ a.y); }
  long long len() const {
    return static_cast<long long>(x) * x + static_cast<long long>(y) * y;
  }
  long double ang() const { return adj(atan2(y, x)); }
  int x, y;
} pt[MAXN];
int n;
void init();
void input();
void work();
long double triarea(const pT &a, const pT &b, const pT &c) {
  return static_cast<long double>(abs((a - b) ^ (a - c))) / 2;
}
int quadrant(const pT &a, const pT &b) {
  long long dot = a * b, det = a ^ b;
  return (det > 0 && dot >= 0)   ? 1
         : (det >= 0 && dot < 0) ? 2
         : (det < 0 && dot <= 0) ? 3
                                 : 4;
}
long double getang(const pT &a, const pT &b) { return adj(b.ang() - a.ang()); }
int main() {
  init();
  input();
  work();
}
void init() { ios::sync_with_stdio(false); }
void input() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d%d", &pt[i].x, &pt[i].y);
}
void work() {
  if (((pt[2] - pt[1]) ^ (pt[3] - pt[2])) < 0) reverse(pt + 1, pt + 1 + n);
  for (int i = 1; i <= n; ++i) pt[i + n] = pt[i];
  pt[0] = pt[n];
  pt[n + n + 1] = pt[1];
  int nl = 1;
  long double S = 0;
  for (int i = 2; i < n; ++i) S += triarea(pt[1], pt[i], pt[i + 1]);
  long double mini = LINF;
  long double ta, tb, tc;
  for (int nr = n + 1; nr <= n << 1; ++nr) {
    S += triarea(pt[nl], pt[nr - 1], pt[nr]);
    while ((quadrant(pt[nl + 1] - pt[nl], pt[nr] - pt[nr - 1]) ^ 1) &&
           ((pt[nl + 1] - pt[nl]) != (pt[nr] - pt[nr - 1]))) {
      S -= triarea(pt[nl], pt[nl + 1], pt[nr]);
      ++nl;
    }
    tc = sqrt(static_cast<long double>((pt[nr] - pt[nl]).len()));
    tb = tc * sin(getang(pt[nr] - pt[nl], pt[nr] - pt[nr - 1]));
    ta = sqrt(tc * tc - tb * tb);
    mini = min(mini, ta * tb / 2 - S);
  }
  int nr = 1;
  S = 0;
  for (int nl = 1; nl <= n; ++nl) {
    S -= triarea(pt[nl - 1], pt[nl], pt[nr]);
    while ((quadrant(pt[nl + 1] - pt[nl], pt[nr + 1] - pt[nr]) == 1) ||
           ((pt[nl + 1] - pt[nl]) == (pt[nr + 1] - pt[nr]))) {
      S += triarea(pt[nl], pt[nr], pt[nr + 1]);
      ++nr;
    }
    tc = sqrt(static_cast<long double>((pt[nr] - pt[nl]).len()));
    tb = tc * sin(getang(pt[nl + 1] - pt[nl], pt[nr] - pt[nl]));
    ta = sqrt(tc * tc - tb * tb);
    mini = min(mini, ta * tb / 2 - S);
  }
  cout << setprecision(13) << fixed << mini << endl;
}
