#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;
}