#include <bits/stdc++.h>
using namespace std;
struct point {
  double x, y;
};
double dist(point P, point Q) {
  double dx = P.x - Q.x, dy = P.y - Q.y;
  return sqrt(dx * dx + dy * dy);
}
double area(point P, point Q, point R) {
  return ((Q.x - P.x) * (R.y - P.y) - (Q.y - P.y) * (R.x - P.x)) / 2.0;
}
double inprod(point O, point P, point Q) {
  return (P.x - O.x) * (Q.x - O.x) + (P.y - O.y) * (Q.y - O.y);
}
int N;
point A[40010];
double func(void) {
  int i, j;
  if (area(A[0], A[1], A[2]) < 0.0)
    for (i = 1; i < N - i; i++) swap(A[i], A[N - i]);
  j = 0;
  double ans = 1.0E+18, area2 = 0.0;
  for ((i) = 0; (i) < (int)(N); (i)++) {
    area2 -= area(A[i], A[(i + 1) % N], A[j]);
    while (inprod(A[i], A[(i + 1) % N], A[j]) <
           inprod(A[i], A[(i + 1) % N], A[(j + 1) % N])) {
      area2 += area(A[(i + 1) % N], A[j], A[(j + 1) % N]);
      j = (j + 1) % N;
    }
    if (j == (i + 1) % N) return 0.0;
    double c = -inprod(A[(i + 1) % N], A[i], A[j]) /
               dist(A[(i + 1) % N], A[i]) / dist(A[(i + 1) % N], A[j]);
    double tmp = dist(A[(i + 1) % N], A[j]) * dist(A[(i + 1) % N], A[j]) * c *
                     sqrt(max(1.0 - c * c, 0.0)) / 2.0 -
                 area2;
    ans = min(ans, tmp);
  }
  return ans;
}
int main(void) {
  int i;
  scanf("%d", &N);
  for ((i) = 0; (i) < (int)(N); (i)++) scanf("%lf%lf", &A[i].x, &A[i].y);
  double ans = func();
  for ((i) = 0; (i) < (int)(N); (i)++) A[i].x = -A[i].x;
  double tmp = func();
  ans = min(ans, tmp);
  printf("%.9f\n", ans);
  return 0;
}
