#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, c = getchar(), f = 0;
  for (; c > '9' || c < '0'; f = c == '-', c = getchar())
    ;
  for (; c >= '0' && c <= '9'; x = (x << 1) + (x << 3) + c - '0', c = getchar())
    ;
  return f ? -x : x;
}
const int N = 40000 + 10;
int n;
double ans = 1e18;
struct point {
  double x, y;
} p[N];
double dist(const point &a, const point &b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double det(const point &a, const point &b, const point &c, const point &d) {
  return (b.x - a.x) * (d.y - c.y) - (b.y - a.y) * (d.x - c.x);
}
double dot(const point &a, const point &b, const point &c, const point &d) {
  return (b.x - a.x) * (d.x - c.x) + (b.y - a.y) * (d.y - c.y);
}
void work() {
  double sum = 0;
  point o = {0, 0}, res;
  int j = 1;
  for (int i = (int)0, _y = n - 1; i <= _y; i++) {
    for (; dot(p[i], p[(i + 1) % n], p[(j + 1) % n], p[j]) < 0; j = (j + 1) % n)
      sum += det(o, p[(j + 1) % n], o, p[j]);
    double l1 = dist(p[i], p[(i + 1) % n]), l2 = dist(p[i], p[j]),
           h = det(p[i], p[j], p[i], p[(i + 1) % n]) / l1,
           l = sqrt(l2 * l2 - h * h);
    res = (point){p[i].x + (p[(i + 1) % n].x - p[i].x) * l / l1,
                  p[i].y + (p[(i + 1) % n].y - p[i].y) * l / l1};
    ans = min(ans, det(o, p[j], o, res) + det(o, res, o, p[(i + 1) % n]) - sum);
    sum -= det(o, p[(i + 2) % n], o, p[(i + 1) % n]);
  }
}
int main() {
  n = read();
  for (int i = (int)0, _y = n - 1; i <= _y; i++)
    p[i].x = read(), p[i].y = read();
  if (det(p[0], p[1], p[1], p[2]) > 0) reverse(p, p + n);
  work();
  for (int i = (int)0, _y = n - 1; i <= _y; i++) p[i].x = -p[i].x;
  reverse(p, p + n);
  work();
  printf("%.12lf\n", ans / 2);
}
