#include <bits/stdc++.h>
using namespace std;
struct tacka{
    int x, y;
};
long long strana(const tacka &O,const tacka &A,const tacka &B){
    return (long long)(A.x-O.x)*(B.y-O.y)-(long long)(A.y-O.y)*(B.x-O.x);
}
long long povrsina(const vector<tacka> &mnogougao){
    long long povr=0;
    int n=mnogougao.size();
    for(int i=0;i<n;i++){
      int j=(i+1)%n;
      povr+=(long long)mnogougao[i].x*mnogougao[j].y-(long long)mnogougao[j].x*mnogougao[i].y;
    }
    return abs(povr)/2;
}
bool cmp(const tacka &a,const tacka &b){
    return a.x<b.x || (a.x==b.x && a.y<b.y);
}
vector<tacka> omotac(vector<tacka> tacke){
    int n=tacke.size();
    if(n<=1) return tacke;
    sort(tacke.begin(),tacke.end(),cmp);
    vector<tacka> om;
    for(int i=0;i<n;i++){
        while(om.size()>=2 && strana(om[om.size()-2],om[om.size()-1],tacke[i])<=0){
            om.pop_back();
        }
        om.push_back(tacke[i]);
    }
    int duz=om.size();
    for(int i=n-2;i>=0;i--){
        while(om.size()>duz && strana(om[om.size()-2],om[om.size()-1],tacke[i])<=0){
            om.pop_back();
        }
        om.push_back(tacke[i]);
    }
    om.pop_back();
    return om;
}
int N;
int main(){
    cin>>N;
    vector<tacka> tacke(N);
    for(int i=0;i<N;i++){
        scanf("%d",&tacke[i].x);
        scanf("%d",&tacke[i].y);
    }
    long long najmpovr=1e18;
    for(int i=0;i<N;i++){
        vector<tacka> promena;
        for(int j=0;j<N;j++){
            if(i!=j){
                promena.push_back(tacke[j]);
            }
        }
        vector<tacka> om=omotac(promena);
        long long povr=povrsina(om);
        najmpovr=min(najmpovr,povr);
    }
    cout<<najmpovr<<endl;
    return 0;
}