#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define PI acos(-1)
#define LSB(i) ((i) & -(i))
#define ll long long
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define sc second
#define th third
#define fo fourth
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ldb double
#define INF 1e15
#define MOD 1000000007
#define endl "\n"

#define all(data)       data.begin(),data.end()
#define TYPEMAX(type)   std::numeric_limits<type>::max()
#define TYPEMIN(type)   std::numeric_limits<type>::min()
#define MAXN 100007
struct pt
{
    ll x,y;
    pt(){}
    pt(int u,int v) {x=u,y=v;}
};
pt operator + (pt a,pt b) {return pt(a.x+b.x,a.y+b.y);}
pt operator - (pt a,pt b) {return pt(a.x-b.x,a.y-b.y);}
ll cross(pt a,pt b) {return a.x*b.y-a.y*b.x;}
bool cw(pt a,pt b,pt c) {return cross(a-b,c-b)>=0;}
bool cmp1(pt a,pt b) {return mp(a.y,a.x)<mp(b.y,b.x);}
bool cmp2(pt a,pt b) {return cw(a,pt(0,0),b);}
vector<pt> ho,tr;
vector<ll> adj[MAXN];
bool vis[MAXN];
bool Inside(vector<pt> ch,pt a){
    bool check1=false,check2=false;
    for(int i=0;i<ch.size();i++)
    {
        if(cw(a,ch[i],ch[(i+1)%(ch.size())])) check1=true;
        else check2=true;
    }
    if(check1 && check2) return false;
    return true;
}
vector<pt> Convex_Hull(vector<pt> a)
{
    if(a.size()<3) return a;
    sort(all(a),cmp1); pt o=a[0];
    for(int i=0;i<a.size();i++) a[i]=a[i]-o;
    sort(a.begin()+1,a.end(),cmp2);
    vector<pt> ch;
    for(int i=0;i<a.size();i++)
    {
        while(ch.size()>=2 && cw(ch[ch.size()-2],ch.back(),a[i])) ch.pop_back();
        ch.pb(a[i]);
    }
    for(int i=0;i<ch.size();i++) ch[i]=ch[i]+o;
    return ch;
}
ll P(vector<pt> a)
{
    if(a.size()<3) return 0;
    ll rez=0,m=a.size();
    for(int i=0;i<m;i++) rez+=(a[i].x*a[(i+1)%m].y-a[(i+1)%m].x*a[i].y)/2;
    if(rez<0) rez*=(-1);
    return rez;
}
vector<pt> p,part[MAXN];
int main()
{
    ios::sync_with_stdio(false); cin.tie(0);
    ll n; cin>>n;
    for(int i=1;i<=n;i++)
    {
        ll xx,yy; cin>>xx>>yy;
        p.pb(pt(xx,yy));
    }
    vector<pt> ch=Convex_Hull(p);//ch[0]=dole levo
    pt o=ch[0];
    for(int i=0;i<p.size();i++) p[i]=p[i]-o;
    for(int i=0;i<ch.size();i++) ch[i]=ch[i]-o;
    ll m=ch.size();
    sort(all(p),cmp1);
    sort(p.begin()+1,p.end(),cmp2);
    /*cout<<endl;
    for(auto pp:p) cout<<pp.x<<" "<<pp.y<<endl;
    cout<<endl;
    for(auto pp:ch) cout<<pp.x<<" "<<pp.y<<endl;*/
    ll idx=2;
    for(int i=2;i<n;i++)
    {
        if(mp(p[i].x,p[i].y)==mp(ch[idx].x,ch[idx].y)) idx++;
        else part[idx].pb(p[i]);
    }
    /*for(int i=2;i<m;i++)
    {
        cout<<i<<"|  ";
        for(auto pp:part[i]) cout<<pp.x<<" "<<pp.y<<"  ";
        cout<<endl;
    }*/
    vector<pt> tmp1,tmp2;
    for(int i=1;i<n;i++) tmp1.pb(p[i]);
    ll rez=P(Convex_Hull(tmp1)),A=P(ch);//ch[0]
    tmp1=part[2]; tmp1.pb(ch[0]); tmp1.pb(ch[2]);
    tmp2=tmp1; tmp2.pb(ch[1]);
    rez=min(rez,A-P(Convex_Hull(tmp2))+P(Convex_Hull(tmp1)));//ch[1]
    tmp1=part[m-1]; tmp1.pb(ch[0]); tmp1.pb(ch[m-2]);
    tmp2=tmp1; tmp2.pb(ch[m-1]);
    rez=min(rez,A-P(Convex_Hull(tmp2))+P(Convex_Hull(tmp1)));//ch[m-1]
    for(int i=2;i<m-1;i++)
    {
        tmp2=part[i];
        for(auto pp:part[i+1]) tmp1.pb(pp);
        tmp1.pb(ch[i-1]); tmp1.pb(ch[i+1]);
        tmp2=tmp1; tmp2.pb(ch[i]);
        rez=min(rez,A-P(Convex_Hull(tmp2))+P(Convex_Hull(tmp1)));//ch[i]
    }
    cout<<rez<<endl;
    return 0;
}