#include <bits/stdc++.h>
#define ll long long
using namespace std;
mt19937_64 rng;
int N;
struct XY
{
  ll X, Y;
}C[100006];
inline int Orientation(XY M, XY M1, XY M2)
{
  ll temp = (M.X - M1.X) * (M2.Y - M1.Y) - (M.Y - M1.Y) * (M2.X - M1.X);
  if(temp < 0) return -1;
  if(temp > 0) return +1;
  return 0;
}
inline bool compC(XY e1, XY e2) {return Orientation(C[1], e1, e2) < 0;}
inline void SortC(int LIM = N)
{
  for(int i = 1; i <= LIM; i++)
  {
    if((C[1].X > C[i].X) || ((C[1].X == C[i].X) && (C[1].Y > C[i].Y))) swap(C[1], C[i]);
  }
  sort(C + 2, C + LIM + 1, compC);
  return;
}
inline void ConvexHull(vector <int>& V, int L = 1, int R = N, int skip = -1)
{
  for(int i = L; i <= R; i++)
  {
    if((i != skip) && (Orientation(C[i], C[L], C[R]) >= 0))
    {
      while((V.size() >= 2) && (Orientation(C[V[V.size() - 2]], C[V[V.size() - 1]], C[i])) > 0) V.pop_back();
      V.push_back(i);
    }
  }
  return;
}
inline ll Area(const vector <int>& V)
{
  if(V.size() <= 2) return 0;
  ll RET = 0;
  for(int i = V.size() - 2; i >= 0; i--) RET += (C[V[i]].X - C[V[i + 1]].X) * (C[V[i]].Y + C[V[i + 1]].Y);
  RET += (C[V.back()].X - C[V[0]].X) * (C[V.back()].Y + C[V[0]].Y);
  return abs(RET) >> 1;
}
int main()
{
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> N;
  for(int i = 1; i <= N; i++) cin >> C[i].X >> C[i].Y;
  SortC();
  vector <int> M;
  ConvexHull(M);
  ll A = Area(M), MAX = 0;
  for(int i = 1, LIM = M.size() - 1; i < LIM; i++)
  {
    vector <int> V;
    ConvexHull(V, M[i - 1], M[i + 1], M[i]);
    MAX = max(Area({M[i - 1], M[i], M[i + 1]}) - Area(V), MAX);
  }
  M.clear();
  ConvexHull(M, 1, N - 1);
  ll edgecase = Area(M);
  M.clear();
  swap(C[1], C[N]);
  SortC(N - 1);
  ConvexHull(M, 1, N - 1);
  edgecase = min(Area(M), edgecase);
  cout << min(edgecase, A - MAX) << '\n';

  return 0;
}