#include <bits/stdc++.h>
using namespace std;
int Sig(double a) { return a < -1e-8 ? -1 : (a > 1e-8); }
struct Point {
  double x, y;
  Point() {}
  Point(double x0, double y0) : x(x0), y(y0) {}
  void in() { scanf("%lf%lf", &x, &y); }
  void out() { printf("%.3f %.3f\n", x, y); }
  Point operator*(double t) { return Point(t * x, t * y); }
  double len() { return sqrt(x * x + y * y); }
  double operator*(Point pt) { return x * pt.y - y * pt.x; }
  double operator^(Point pt) { return pt.x * x + pt.y * y; }
  Point operator-(Point pt) { return Point(x - pt.x, y - pt.y); }
  Point operator+(Point pt) { return Point(x + pt.x, y + pt.y); }
  Point turnlen(double l) {
    double r = l / len();
    return Point(x * r, y * r);
  }
  bool operator==(Point pt) {
    if (fabs(x - pt.x) < 1e-8 && fabs(y - pt.y) < 1e-8)
      return true;
    else
      return false;
  }
};
double dis(Point a, Point b) { return (a - b).len(); }
double Area(Point a, Point b, Point c) { return fabs((b - a) * (c - a)) * 0.5; }
struct Line {
  Point p, q;
  Line() {}
  Line(Point p0, Point q0) : p(p0), q(q0) {}
};
double Dis_Point_to_Line(Point a, Line l) {
  Point b = l.p;
  Point c = l.q;
  double len = (b - c).len();
  double s = fabs((a - b) * (a - c));
  return s / len;
}
Point p[100010];
int n;
double mark[100010];
double solve() {
  double tmp = 1e20;
  mark[0] = mark[1] = 0;
  for (int i = 2; i < n; i++)
    mark[i] = mark[i - 1] + Area(p[0], p[i - 1], p[i]);
  int j = 2;
  for (int i = 0; i < n; i++) {
    Point o = p[i + 1] - p[i];
    o = Point(-o.y, o.x);
    while (o * (p[j + 1] - p[j]) <= 0) j = (j + 1) % n;
    double s;
    if (j > i)
      s = mark[j] - mark[i] - Area(p[0], p[i], p[j]);
    else {
      s = mark[i] - mark[j] - Area(p[0], p[i], p[j]);
      s = mark[n - 1] - s;
    }
    double x = Dis_Point_to_Line(p[j], Line(p[i], p[i + 1]));
    double z = dis(p[i], p[j]);
    double y = sqrt(z * z - x * x);
    double now = x * y * 0.5 - s;
    tmp = min(tmp, now);
  }
  return tmp;
}
void Change_to_Anticlockwise(Point p[], int n) {
  double sum = 0;
  for (int i = 0; i < n; i++) sum += p[i] * p[(i + 1) % n];
  if (sum < 0) {
    for (int i = 0; i < n / 2; i++) swap(p[i], p[n - i - 1]);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) p[i].in();
  Change_to_Anticlockwise(p, n);
  p[n] = p[0];
  p[n + 1] = p[1];
  bool flag = false;
  for (int i = 1; i <= n; i++) {
    if (Sig((p[i - 1] - p[i]) ^ (p[i + 1] - p[i])) >= 0) flag = true;
  }
  if (flag)
    printf("0.000000000000\n");
  else {
    double ans = 1e20;
    ans = min(ans, solve());
    for (int i = 0; i < n; i++) p[i].x = -p[i].x;
    for (int i = 0; i < n / 2; i++) swap(p[i], p[n - 1 - i]);
    p[n] = p[0];
    ans = min(ans, solve());
    printf("%.12f\n", ans);
  }
  return 0;
}
