#include <bits/stdc++.h>
using namespace std;
struct P {
  long long x, y;
  P(long long _x = 0.0, long long _y = 0.0) : x(_x), y(_y) {}
  void Scan() { scanf("%I64d%I64d", &x, &y); }
  friend P operator+(const P a, const P b) { return P(a.x + b.x, a.y + b.y); }
  friend P operator-(const P a, const P b) { return P(a.x - b.x, a.y - b.y); }
};
long long Vect(P a, P b) { return a.x * b.y - a.y * b.x; }
long long Vect(P a, P b, P c) { return Vect(a - c, b - c); }
long long Scal(P a, P b) { return a.x * b.x + a.y * b.y; }
long long Scal(P a, P b, P c) { return Scal(a - c, b - c); }
double Len(P x, P y = P(0, 0)) {
  return sqrt((x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y) + 0.0);
}
long long SqrLen(P x, P y = P(0, 0)) {
  return (x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y);
}
double GetCos(P a, P b, P c = P(0, 0)) {
  return Scal(a, b, c) / Len(a, c) / Len(b, c);
}
double GetSin(P a, P b, P c = P(0, 0)) {
  return Vect(a, b, c) / Len(a, c) / Len(b, c);
}
int n;
P ar[40009];
long long Labs(long long x) { return x < 0 ? -x : x; }
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) ar[i].Scan();
  double Min = 1000 * 1000 * 1000;
  Min *= Min;
  for (int i = 0; i < n; i++) {
    P prev = ar[(i - 1 + n) % n];
    P now = ar[i];
    P next = ar[(i + 1) % n];
    if (Scal(prev, next, now) >= 0) {
      printf("%.9f\n", 0.0);
      return 0;
    }
  }
  int p1 = 0, p2 = 1;
  long long S = 0;
  do {
    int next1 = (p1 + 1) % n;
    int next2 = (p2 + 1) % n;
    while (Scal(ar[next1] - ar[p1], ar[next2] - ar[p2]) >= 0) {
      S += Labs(Vect(ar[p2], ar[next2], ar[p1]));
      p2 = (p2 + 1) % n;
      next2 = (p2 + 1) % n;
    }
    double res = SqrLen(ar[p1], ar[p2]) * GetCos(ar[next1], ar[p2], ar[p1]) *
                 fabs(GetSin(ar[next1], ar[p2], ar[p1])) / 2;
    res -= S / 2.0;
    Min = min(Min, res);
    S -= Labs(Vect(ar[p2], ar[next1], ar[p1]));
    p1 = (p1 + 1) % n;
  } while (p1 != 0);
  reverse(ar, ar + n);
  p1 = 0, p2 = 1;
  S = 0;
  do {
    int next1 = (p1 + 1) % n;
    int next2 = (p2 + 1) % n;
    while (Scal(ar[next1] - ar[p1], ar[next2] - ar[p2]) >= 0) {
      S += Labs(Vect(ar[p2], ar[next2], ar[p1]));
      p2 = (p2 + 1) % n;
      next2 = (p2 + 1) % n;
    }
    double res = SqrLen(ar[p1], ar[p2]) * GetCos(ar[next1], ar[p2], ar[p1]) *
                 fabs(GetSin(ar[next1], ar[p2], ar[p1])) / 2;
    res -= S / 2.0;
    Min = min(Min, res);
    S -= Labs(Vect(ar[p2], ar[next1], ar[p1]));
    p1 = (p1 + 1) % n;
  } while (p1 != 0);
  printf("%.9lf\n", Min);
  return 0;
}
