#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-9, INF = 1e50;
struct P {
  double first, second;
  P() {}
  P(double first, double second) : first(first), second(second) {}
  void eat() { scanf("%lf%lf", &first, &second); }
  P operator+(const P &p) const {
    return P(first + p.first, second + p.second);
  }
  P operator-(const P &p) const {
    return P(first - p.first, second - p.second);
  }
  P operator*(double k) { return P(first * k, second * k); }
  double operator*(P p) { return first * p.first + second * p.second; }
  double operator^(P p) { return first * p.second - second * p.first; }
  double mag2() { return first * first + second * second; }
  double mag() { return sqrt(mag2()); }
  bool operator<(const P &p) const {
    if ((fabs((first) - (p.first)) < EPS)) return ((second) < (p.second) - EPS);
    return ((first) < (p.first) - EPS);
  }
  bool operator==(const P &p) const {
    return (fabs((first) - (p.first)) < EPS) &&
           (fabs((second) - (p.second)) < EPS);
  }
  P rot() { return P(-second, first); }
  P rot(double the) {
    return P(first * cos(the) - second * sin(the),
             first * sin(the) + second * cos(the));
  }
  P nor() {
    if ((fabs((mag()) - (0)) < EPS)) return *this;
    return *this * (1. / mag());
  }
  void out() { printf("%f %f\n", first, second); }
};
const int N = 40360 * 5;
int n;
P p[N], q[N];
double ang(P u, P v) { return atan2(u ^ v, u * v); }
int main() {
  scanf("%d", &n);
  for (int i = (0); i < (int)(n); i++) p[i].eat();
  double area = 0;
  for (int i = (0); i < (int)(n); i++) area += p[i] ^ p[(i + 1) % n];
  if (((area) < (0) - EPS)) reverse(p, p + n);
  for (int i = (0); i < (int)(n); i++) p[n + i] = p[n * 2 + i] = p[i];
  double ans = INF;
  for (int i = (1); i <= (int)(n); i++) {
    if (!(((p[i - 1] - p[i]) * (p[i + 1] - p[i])) < (0) - EPS)) {
      puts("0");
      return 0;
    }
  }
  if ((fabs((ans) - (INF)) < EPS))
    for (int iter = (0); iter < (int)(2); iter++) {
      P last = p[1];
      double cur = 0;
      int e = 2;
      double gt = 0;
      for (int i = (0); i < (int)(n); i++) {
        P first = (p[i + 1] - p[i]).nor();
        P start = last;
        cur += start ^ p[e - 1];
        last = p[e - 1];
        while (e < i + 1 + n) {
          double dot = (p[e] - p[i + 1]) * first;
          if (!((gt) < (dot)-EPS)) break;
          gt = dot;
          cur += last ^ p[e];
          last = p[e];
          ++e;
        }
        P cor = p[i + 1] + first * gt;
        cur += p[e - 1] ^ cor;
        cur += cor ^ start;
        ans = min(ans, -cur / 2);
        P v = (p[i + 2] - p[i + 1]).nor();
        double alp = ang(first, v);
        last = p[i + 1] + v * (gt / cos(alp));
        cur -= (last - p[i + 1]) ^ (cor - last);
        gt = (p[e - 1] - p[i + 2]) * v;
      }
      reverse(p, p + n * 2);
      for (int i = (0); i < (int)(n * 2); i++) p[i].second *= -1;
    }
  printf("%.20f\n", ans);
}
