#include <bits/stdc++.h>
#define ll long long
#define MAXN 100010
using namespace std;
struct point
{
    ll x,y;
};
ll Cross_Product(point c,point b,point a)
{
    return (c.x-b.x)*(b.y-a.y)-(c.y-b.y)*(b.x-a.x);
}
point p;
bool Cmp(point a,point b)
{
    if (Cross_Product(p,a,b)>0)
        return true;
    return false;
}
ll Triangle_Area(point a,point b,point c)
{
    return abs(Cross_Product(a,b,c))/2;
}
point a[MAXN];
int main()
{
    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    ll n;
    cin >> n;
    for (ll i=1;i<=n;i++)
        cin >> a[i].x >> a[i].y;
    ll ind=1;
    for (ll i=1;i<=n;i++)
    {
        if (a[i].y<a[ind].y || (a[i].y==a[ind].y && a[i].x<a[ind].x))
            ind=i;
    }
    swap(a[1],a[ind]);
    p=a[1];
    sort(a+2,a+1+n,Cmp);
    stack<ll> hull;
    hull.push(1);
    hull.push(2);
    hull.push(3);
    for (ll i=4;i<=n;i++)
    {
        while (hull.size()>1)
        {
            ll t=hull.top();
            hull.pop();
            ll q=hull.top();
            hull.push(t);
            if (Cross_Product(a[q],a[t],a[i])<0)
                hull.pop();
            else
                break;
        }
        hull.push(i);
    }
    vector<ll> v;
    while (!hull.empty())
    {
        v.push_back(hull.top());
        hull.pop();
    }
    reverse(v.begin(),v.end());
    ll area=0;
    for (ll i=1;i<v.size()-1;i++)
        area+=Triangle_Area(a[v[0]],a[v[i]],a[v[i+1]]);
    ll ans=area;
    for (ll i=0;i<v.size();i++)
    {
        ll ind=i,p1=v[i];
        ind++;
        if (ind==v.size())
            ind=0;
        ll p2=v[ind];
        ind++;
        if (ind==v.size())
            ind=0;
        ll p3=v[ind];
        vector<ll> cur;
        ll l=1,r=n;
        if (p1<p3)
        {
            l=p1;
            r=p3;
        }
        for (ll pos=l;pos<=r;pos++)
        {
            if (Triangle_Area(a[p1],a[p2],a[p3])==Triangle_Area(a[pos],a[p2],a[p3])+Triangle_Area(a[p1],a[pos],a[p3])+Triangle_Area(a[p1],a[p2],a[pos]) && pos!=p2)
                cur.push_back(pos);
        }
        ll curarea=area-Triangle_Area(a[p1],a[p2],a[p3]);
        if (cur.size()==2)
        {
            ans=min(ans,curarea);
            continue;
        }
        stack<ll> hull1;
        hull1.push(cur[0]);
        hull1.push(cur[1]);
        hull1.push(cur[2]);
        for (ll j=3;j<cur.size();j++)
        {
            while (hull1.size()>1)
            {
                ll t=hull1.top();
                hull1.pop();
                ll q=hull1.top();
                hull1.push(t);
                if (Cross_Product(a[q],a[t],a[j])<0)
                    hull1.pop();
                else
                    break;
            }
            hull1.push(j);
        }
        vector<ll> w;
        while (!hull1.empty())
        {
            w.push_back(hull1.top());
            hull1.pop();
        }
        reverse(w.begin(),w.end());
        for (ll i=0;i<w.size()-1;i++)
            curarea+=Triangle_Area(a[w[0]],a[w[i]],a[w[i+1]]);
        ans=min(ans,curarea);
    }
    cout << ans;
    return 0;
}