#include <bits/stdc++.h>
using namespace std;
#define ll long long
int orj (const pair<ll, ll>& t1, const pair<ll, ll>& t2, const pair<ll, ll>& t3)
{
    ll ras=(t2.first-t1.first)*(t3.second-t1.second)-(t2.second-t1.second)*(t3.first-t1.first);
    if (ras>0) return 1;
    else if (ras<0) return -1;
}
bool compt(const pair<ll, ll>& a, const pair<ll, ll>& b)
{
    return (a.second<b.second) || (a.second==b.second && a.first<b.first);
}
ll gh(vector<pair<ll, ll>>& tacke, int n)
{
    sort(tacke.begin(), tacke.end(), compt);
    pair<ll, ll> mint=tacke.front();
    sort(tacke.begin(), tacke.end(), [&mint](const pair<ll, ll>& t1, const pair<ll, ll>& t2) {return orj(mint, t1, t2)==-1;});
    vector <pair<ll, ll>> om;
    om.push_back(tacke[0]);
    om.push_back(tacke[1]);
    om.push_back(tacke[2]);
    for (int i=3; i<n; i++)
    {
        while (om.size()>1 && orj(om[om.size()-2], om[om.size()-1], tacke[i])!=-1)
        {
            om.pop_back();
        }
        om.push_back(tacke[i]);
    }
    ll resp=0;
    for (int i=0; i<om.size()-1; i++)
    {
        resp+=om[i].first*om[i+1].second-om[i].second*om[i+1].first;
    }
    resp+=om[om.size()-1].first*om[0].second-om[om.size()-1].second*om[0].first;
    return abs(resp)/2;
}
int main()
{
    int n;
    cin>>n;
    vector<pair<ll, ll>> tacke(n);
    for (int i=0; i<n; i++)
    {
        cin>>tacke[i].first>>tacke[i].second;
    }
    ll res=1e18;
    for (int i=0; i<n; i++)
    {
        vector <pair <ll, ll>> pom;
        for (int j=0; j<n; j++)
        {
            if (j!=i) pom.push_back(tacke[j]);
        }
        res=min(res, gh(pom, n-1));
    }
    cout<<res<<endl;
    return 0;
}