#include <bits/stdc++.h>
using namespace std;
const long double eps=1e-8;
const int maxn=1e5+10;
typedef __int128  ll;
struct point
{
    ll x,y;
} a[maxn];
bool cmp(point r,point t)
{
    if(r.x==t.x)
        return r.y<t.y;
    return r.x<t.x;
}
bool mult(point sp,point ep,point op)
{
    return (sp.x-op.x)*(ep.y-op.y)>=(ep.x-op.x)*(sp.y-op.y);;
}
ll area(point a,point b){
    return a.x*b.y-a.y*b.x;
}
vector<long double>posi;
vector<point>up,down;
__int128 le_ri[maxn<<1],ri_le[maxn<<1];
int main()
{
    int n,cnt;
    scanf("%d",&n);
    long long tx,ty;
    for(int i=1; i<=n; i++)
    {
        scanf("%lld%lld",&tx,&ty);
        a[i].x=tx;
        a[i].y=ty;
    }
    sort(a+1,a+1+n,cmp);
    for(int i=1; i<=n; i++)
    {
        if(i==1||a[i].x!=a[i-1].x)
        {
            posi.push_back(a[i].x-eps);
            posi.push_back(a[i].x+eps);
        }
    }
    int l=0;
    for(int i=0; i<posi.size(); i++)
    {
        __int128 changeup=0,changedown=0;
        for(int j=l+1; j<=n; j++)
        {
            if(a[j].x<posi[i])
            {
                if(up.size()==0)
                {
                    up.push_back(a[j]);
                }
                else if(up.size()==1)
                {
                    up.push_back(a[j]);
                    changeup+=area(up[1],up[0]);
                }
                else
                {
                    while(up.size()>=2&&!mult(a[j],up[up.size()-1],up[up.size()-2]))
                    {
                        changeup-=area(up[up.size()-1],up[up.size()-2]);
                        up.pop_back();
                    }
                    up.push_back(a[j]);
                    changeup+=area(up[up.size()-1],up[up.size()-2]);
                }
                if(down.size()==0)
                {
                    down.push_back(a[j]);
                }
                else if(down.size()==1)
                {
                    down.push_back(a[j]);
                    changedown+=area(down[0],down[1]);
                }
                else
                {
                    while(down.size()>=2&&mult(a[j],down[down.size()-1],down[down.size()-2]))
                    {
                        changedown-=area(down[down.size()-2],down[down.size()-1]);
                        down.pop_back();
                    }
                    down.push_back(a[j]);
                    changedown+=area(down[down.size()-2],down[down.size()-1]);
                }
                l=j;
            }
            else
            {
                break;
            }
        }
        if(i==0)
            le_ri[i]=changedown+changeup;
        else
            le_ri[i]=le_ri[i-1]+changedown+changeup;
    }
    down.clear();
    up.clear();
    int r=n+1;
    for(int i=posi.size()-1; i>=0; i--)
    {
        __int128 changeup=0,changedown=0;
        for(int j=r-1; j>=1; j--)
        {
            if(a[j].x>posi[i])
            {
                if(up.size()==0)
                {
                    up.push_back(a[j]);
                }
                else if(up.size()==1)
                {
                    up.push_back(a[j]);
                    changeup+=area(up[1],up[0]);
                }
                else
                {
                    while(up.size()>=2&&!mult(a[j],up[up.size()-1],up[up.size()-2]))
                    {
                        changeup-=area(up[up.size()-1],up[up.size()-2]);
                        up.pop_back();
                    }
                    up.push_back(a[j]);
                    changeup+=area(up[up.size()-1],up[up.size()-2]);
                }
                if(down.size()==0)
                {
                    down.push_back(a[j]);
                }
                else if(down.size()==1)
                {
                    down.push_back(a[j]);
                    changedown+=area(down[0],down[1]);
                }
                else
                {
                    while(down.size()>=2&&mult(a[j],down[down.size()-1],down[down.size()-2]))
                    {
                        changedown-=area(down[down.size()-2],down[down.size()-1]);
                        // cout<<down[down.size()-1].x<<" "<<down[down.size()-1].y<<" "<<down[down.size()-2].x<<" "<<down[down.size()-2].y<<endl;
                        down.pop_back();
                    }
                    down.push_back(a[j]);
                    changedown+=area(down[down.size()-2],down[down.size()-1]);
                }
                r=j;
            }
            else
            {
                break;
            }
        }
        if(i==posi.size()-1)
            ri_le[i]=changedown+changeup;
        else
            ri_le[i]=ri_le[i+1]+changedown+changeup;
    }
    __int128 ans=9000000000000000000;
    for(int i=0; i<posi.size(); i++)
    {
        ans=min(ans,le_ri[i]+ri_le[i]);
    }
    printf("%lld\n",(long long )((ans+1)/2));
    return 0;
}