#include <bits/stdc++.h>
using namespace std;
#define STOP 9223372036854775807
long long aps(long long x)
{
    return x<0?-x:x;
}

struct T{
int x,y;
bool operator<(const T &p) const {
        return x<p.x||(x==p.x&&y<p.y);
    }
};

vector<T> niz;
vector<T> rez;

long long ccw1(T& S,T& A,T& B)
{   long long rez;
    rez=(A.x-S.x)*(B.y-S.y);
    rez=rez-(A.y-S.y)*(B.x-S.x);
    return rez;
}

long long ccw(T &S,T &A,T &B) {
    return (long long)(A.x-S.x)*(B.y-S.y)-(long long)(A.y-S.y)*(B.x-S.x);
}

/*vector<T> jarvisch(vector<T>& niz)
{
    sort(niz.begin(), niz.end());
    vector<T> o;
for (auto& p:niz)
{
        while (o.size()>=2 and ccw(o[o.size()-2], o[o.size()-1], p)<=0)
            o.pop_back();
        o.push_back(p);
 }

size_t lls = o.size();
    for (int i=niz.size()-1; i>=0; i--)
    {
        while (o.size() >lls and ccw(o[o.size()-2], o[o.size()-1], niz[i]) <= 0)
         o.pop_back();

        o.push_back(niz[i]);
  }
    o.pop_back();
    return o;
}*/

vector<T> omot(vector<T> P) {
    int n=P.size(),k;
if (n<=3) return P;
    k=0;
vector<T>H(2*n);
sort(P.begin(),P.end());
long long pp=0;
int kraj;
for (int i=0;i<n;i++)
{  pp=ccw(H[k-2],H[k-1],P[i]);
   while (k>=2 and pp<=0)
     {k--;
     //cout<<k<<endl;
     if(k>=2) pp=ccw(H[k-2], H[k-1],P[i]);}
    H[k++]=P[i];
}
//cout<<i<<" "<<k<<endl;
    int granica=k+1;
  //cout<<granica<<endl;
    for (int i=n-2;i>=0; i--)
{  //cout<<granica<<endl;
     pp=ccw(H[k-2], H[k-1],P[i]);
        while (k>=granica and pp<=0)
        {k--;
           if(k>=2) pp=ccw(H[k-2], H[k-1],P[i]);}

    //cout<<granica<<endl;
        H[k++]=P[i];
    }
    //cout<<k<<endl;
kraj=k-1;
H.resize(kraj);
    return H;
}

long long pp(vector<T> &P) {
long long A=0, rez=0;
int n=P.size();
for (int i=0;i<n;i++)
A=A+(long long)P[i].x*P[(i+1)% n].y-(long long)P[i].y * P[(i+1)% n].x;
rez=aps(A)/2;
return rez;
}

long long Sarus(vector<T>& p)
{
    long long P=0, rez;
    unsigned int i,n,j,pom;
    n=p.size();
    for (i=0;i<n;i++)
    {   pom=i+1;
     j=pom%n;
     //cout<<i<<pom<<j<<endl;
        P=P+p[i].x*p[j].y-p[j].x*p[i].y;
    }
    rez=aps(P)/2;
    return rez;
}

int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);  cout.tie(0);
int n;
long long minP=STOP;
cin>>n;
niz.resize(n);
vector<T> delimican;
for (int i=0;i<n;i++) cin>>niz[i].x>>niz[i].y;
/*for (int i=0;i<n;i++)
    {
        vector<T> pom;
        for (int j=0;j<n;j++)
          if (i!=j) pom.push_back(niz[j]);
      //cout<<minP<<endl;
    delimican=convexo(pom);
  //unsigned long long SP = Sarus(delimican);
  long long longSP=Sarus(delimican);

if (minP<longSP) minP=longSP;
    }

cout<<minP<<endl;
*/

    for (int i=0;i<n;i++)
    {
vector<T> pom;
        for (int j=0; j<n;j++)
        if (i != j) pom.push_back(niz[j]);
delimican=omot(pom);
minP=min(pp(delimican),minP);
    }

cout << minP << "\n";
return 0;
}