#include <bits/stdc++.h>
using namespace std;
inline int read(int r = 0, int s = 0, int c = getchar()) {
  for (; c < 48 || c > 57; s = c, c = getchar())
    ;
  for (; c >= 48 && c <= 57; (r *= 10) += c - 48, c = getchar())
    ;
  return s ^ '-' ? r : -r;
}
struct Vec {
  double x, y;
  Vec() {}
  Vec(double _x, double _y) { x = _x, y = _y; }
  inline Vec operator+(Vec b) { return Vec(x + b.x, y + b.y); }
  inline Vec operator-(Vec b) { return Vec(x - b.x, y - b.y); }
  inline Vec operator-() { return Vec(-x, -y); }
  inline double operator%(Vec b) { return x * b.y - b.x * y; }
  inline double operator*(Vec b) { return x * b.x + y * b.y; }
  inline Vec operator*(double k) { return Vec(k * x, k * y); }
  inline Vec operator/(double k) { return Vec(x / k, y / k); }
  inline double operator~() { return x * x + y * y; }
};
Vec p[40005], v, c;
int n;
double Ans, A;
inline bool ToLeft(Vec a, Vec b) { return b % a >= 1e-12; }
void Work() {
  for (register int h = (A = 0, 2), l = 1, r; l <= n;
       c = v * ((p[h] - p[r]) * v / ~v) + p[r],
                    Ans = min(Ans, (p[h] - c) % (p[r] - c) - A),
                    A -= (p[r % n + 1] - p[r]) % (p[h] - p[r]), l++)
    for (r = l % n + 1, v = p[r] - p[l]; p[h % n + 1] * v > p[h] * v;
         A += (p[h] - p[r]) % (p[h % n + 1] - p[r]), h = h % n + 1)
      ;
}
int main() {
  n = read();
  for (register int i = 1; i <= n; p[i].x = read(), p[i].y = read(), i++)
    ;
  ToLeft(p[2] - p[1], p[3] - p[2]) ? reverse(p + 1, p + n + 1), 0 : 0;
  Ans = 1e18;
  Work();
  for (register int i = 1; i <= n; swap(p[i].x, p[i].y), i++)
    ;
  reverse(p + 1, p + n + 1);
  Work();
  printf("%.20f\n", Ans / 2.);
  return 0;
}
