#include <bits/stdc++.h>
using namespace std;
pair<long long int, long long int> operator-(
    pair<long long int, long long int> p1,
    pair<long long int, long long int> p2) {
  p1.first -= p2.first;
  p1.second -= p2.second;
  return p1;
}
long long int prodesc(pair<long long int, long long int> p1,
                      pair<long long int, long long int> p2) {
  return p1.first * p2.first + p1.second * p2.second;
}
double prodesc(complex<double> p1, complex<double> p2) {
  return real(conj(p1) * p2);
}
double prodvec(complex<double> p1, complex<double> p2) {
  return imag(conj(p1) * p2);
}
int n;
vector<pair<long long int, long long int> > v;
int seguent(int i) { return (i + 1) % n; }
complex<double> punttopoint(pair<long long int, long long int> p) {
  return complex<double>(p.first, p.second);
}
double computaminarea(pair<long long int, long long int> inp0,
                      pair<long long int, long long int> inp1,
                      pair<long long int, long long int> inpimax) {
  complex<double> p0 = punttopoint(inp0);
  complex<double> p1 = punttopoint(inp1);
  complex<double> pimax = punttopoint(inpimax);
  return abs(prodesc(p0 - p1, pimax - p0) * prodvec(p0 - p1, pimax - p0) /
             prodesc(p0 - p1, p0 - p1)) /
         2.0;
}
double areatriangle(pair<long long int, long long int> ip1,
                    pair<long long int, long long int> ip2,
                    pair<long long int, long long int> ip3) {
  complex<double> p1 = punttopoint(ip1);
  complex<double> p2 = punttopoint(ip2);
  complex<double> p3 = punttopoint(ip3);
  return abs(prodvec(p2 - p1, p3 - p2)) / 2.0;
}
double computa() {
  int imax = 1;
  for (int i = 2; i < n; i++)
    if (prodesc(v[0] - v[1], v[i] - v[0]) >=
        prodesc(v[0] - v[1], v[imax] - v[0]))
      imax = i;
  double a = 0;
  for (int i = imax; seguent(i) != 0; i = seguent(i))
    a += areatriangle(v[i], v[seguent(i)], v[0]);
  double minarea = computaminarea(v[0], v[1], v[imax]) - a;
  for (int i = 1; i < n; i++) {
    a += areatriangle(v[i - 1], v[i], v[imax]);
    while (prodesc(v[i] - v[seguent(i)], v[seguent(imax)] - v[i]) >=
           prodesc(v[i] - v[seguent(i)], v[imax] - v[i])) {
      a -= areatriangle(v[imax], v[seguent(imax)], v[i]);
      imax = seguent(imax);
    }
    minarea = min(minarea, computaminarea(v[i], v[seguent(i)], v[imax]) - a);
  }
  return minarea;
}
int main() {
  cout.setf(ios::fixed);
  cout.precision(10);
  cin >> n;
  v = vector<pair<long long int, long long int> >(n);
  for (int i = 0; i < n; i++) cin >> v[i].first >> v[i].second;
  bool oblicu = false;
  for (int i = 0; i < n and not oblicu; i++)
    if (prodesc(v[seguent(i)] - v[i], v[seguent(seguent(i))] - v[seguent(i)]) <=
        0)
      oblicu = true;
  if (oblicu) {
    cout << 0.0 << endl;
  } else {
    double minarea = computa();
    reverse(v.begin(), v.end());
    minarea = min(minarea, computa());
    cout << minarea << endl;
  }
}
