#include <bits/stdc++.h>

using namespace std;

struct tacka{
    int x;
    int y;
};

tacka zaSort;

void zameni(tacka* a,tacka* b){
    int t;
    t=a->x;
    a->x=b->x;
    b->x=t;
    t=a->y;
    a->y=b->y;
    b->y=t;
}

long long vektorski(tacka a,tacka b,tacka c){
    return 1ll*(b.x-a.x)*(c.y-a.y)-1ll*(b.y-a.y)*(c.x-a.x);
}

bool sortpouglu(tacka a,tacka b){
    if(vektorski(zaSort,a,b)>0){
        return true;
    }
    return false;
}

long long aps(long long a){
    if(a>=0){
        return a;
    }
    return -a;
}

long long povrsina_trougla(tacka a,tacka b,tacka c){
    return aps(vektorski(a,b,c))/2;
}

long long povrsina_mnogougla(int* koje,tacka* a,int n){
    long long tmp=0ll;
    int i=2;
    while(i<n){
        tmp+=(long long)povrsina_trougla(a[koje[0]],a[koje[i-1]],a[koje[i]]);
        i++;
    }
    return tmp;
}

long long uradi_sve(int n,tacka* a,int* omotac,int* domotaca){
    int i;
    int gi=0;
    int minny=a[0].y;
    for(i=1;i<n;i++){
        if(a[i].y<minny){
            minny=a[i].y;
            gi=i;
        }
    }
    zameni(&a[0],&a[gi]);
    zaSort.x=a[0].x;
    zaSort.y=a[0].y;
    sort(a+1,a+n,sortpouglu);


    (*domotaca)=2;
    omotac[0]=0;
    omotac[1]=1;
    i=2;
    while(i<n){
        while((*domotaca)>=2 && vektorski(a[omotac[(*domotaca)-2]],a[i],a[omotac[(*domotaca)-1]])>0){
            (*domotaca)--;
        }
        omotac[(*domotaca)]=i;
        i++;
        (*domotaca)++;
    }
    long long ukupna=povrsina_mnogougla(omotac,a,(*domotaca));
    return ukupna;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    tacka* a=new tacka[n];
    int i;
    for(i=0;i<n;i++){
        cin>>a[i].x>>a[i].y;
    }
    int* omotac=new int[n];//cuvaju se indeksi iz a
    int* fejkomotac=new int[n];
    int dfejkomotaca;
    int domotaca;
    long long minn=uradi_sve(n-1,&a[1],omotac,&domotaca);
    long long ukupna=uradi_sve(n,&a[0],omotac,&domotaca);
    long long kandidat=ukupna;
    int skloni=1;
    while(skloni<domotaca-1){
        kandidat=ukupna;
        if(omotac[skloni+1]==omotac[skloni]+1 && omotac[skloni-1]==omotac[skloni]-1){
            kandidat-=povrsina_trougla(a[omotac[skloni-1]],a[omotac[skloni]],a[omotac[skloni+1]]);
            if(kandidat<minn){
                minn=kandidat;
            }
        }
        else{
            dfejkomotaca=2;
            fejkomotac[0]=omotac[skloni-1];
            fejkomotac[1]=omotac[skloni-1]+1;
            while(fejkomotac[1]<omotac[skloni+1] && (fejkomotac[1]==omotac[skloni] || vektorski(a[omotac[skloni-1]],a[fejkomotac[1]],a[omotac[skloni+1]])<0)){
                fejkomotac[1]++;
            }
            i=fejkomotac[1]+1;
            while(i<=omotac[skloni+1]){
                if(i!=omotac[skloni] && vektorski(a[omotac[skloni-1]],a[i],a[omotac[skloni+1]])>=0){
                    while(dfejkomotaca>=2 && vektorski(a[fejkomotac[dfejkomotaca-2]],a[i],a[fejkomotac[dfejkomotaca-1]])>0){
                        dfejkomotaca--;
                    }
                    fejkomotac[dfejkomotaca]=i;
                    dfejkomotaca++;
                }
                i++;
            }
            kandidat-=povrsina_trougla(a[omotac[skloni-1]],a[omotac[skloni]],a[omotac[skloni+1]]);
            if(dfejkomotaca>2){
                kandidat+=(long long)povrsina_mnogougla(fejkomotac,a,dfejkomotaca);
            }
            if(kandidat<minn){
                minn=kandidat;
            }
        }
        skloni++;
    }
    kandidat=ukupna;
    if(n==omotac[skloni]+1 && omotac[skloni-1]==omotac[skloni]-1){
        kandidat-=povrsina_trougla(a[omotac[skloni-1]],a[omotac[skloni]],a[0]);
        if(kandidat<minn){
            minn=kandidat;
        }
    }
    else{
        dfejkomotaca=2;
        fejkomotac[0]=omotac[skloni-1];
        fejkomotac[1]=omotac[skloni-1]+1;
        while(fejkomotac[1]<n && (fejkomotac[1]==omotac[skloni] || vektorski(a[omotac[skloni-1]],a[fejkomotac[1]%n],a[0])<0)){
            fejkomotac[1]++;
        }
        i=fejkomotac[1]+1;
        while(i<=n){
            if(i!=omotac[skloni] && vektorski(a[omotac[skloni-1]],a[i],a[0])>=0){
                while(dfejkomotaca>=2 && vektorski(a[fejkomotac[dfejkomotaca-2]],a[i%n],a[fejkomotac[dfejkomotaca-1]])>0){
                    dfejkomotaca--;
                }
                fejkomotac[dfejkomotaca]=i%n;
                dfejkomotaca++;
            }
            i++;
        }
        kandidat-=povrsina_trougla(a[omotac[skloni-1]],a[omotac[skloni]],a[0]);
        if(dfejkomotaca>2){
            kandidat+=(long long)povrsina_mnogougla(fejkomotac,a,dfejkomotaca);
        }
        if(kandidat<minn){
            minn=kandidat;
        }
    }
    cout<<minn<<endl;
    delete[] omotac;
    delete[] fejkomotac;
    delete[] a;
    return 0;
}