#include <bits/stdc++.h>
#define endl '\n'
#define fi first
#define se second
#define pb push_back
#define yes "YES"
#define no "NO "

using namespace std;

using ll = long long;
const ll inf = 1e18;
using ld = long double;
using pll = pair<ll, ll>;

ll ort(pll &p, pll &q, pll &r)
{
    return (q.second - p.second) * (r.first - q.first) - (q.first - p.first) * (r.second - q.second);
}

vector<pll> omotac(vector<pll> &kord)
{
    pll p0 = *min_element(kord.begin(), kord.end(), [](pll &p1, pll &p2)
                          { return tie(p1.second, p1.first) < tie(p2.second, p2.first); });

    sort(kord.begin(), kord.end(), [&p0](pll &p1, pll &p2)
         {
    ll o = ort(p0, p1, p2);
    if (o == 0)
        return (p1.first - p0.first) * (p1.first - p0.first) +
               (p1.second - p0.second) * (p1.second - p0.second) <
               (p2.first - p0.first) * (p2.first - p0.first) +
               (p2.second - p0.second) * (p2.second - p0.second);
    return o > 0; });

    vector<pll> konveks;
    for (auto &pt : kord)
    {
        while (konveks.size() > 1 && ort(konveks[konveks.size() - 2], konveks.back(), pt) <= 0)
        {
            konveks.pop_back();
        }
        konveks.push_back(pt);
    }
    return konveks;
}

ll povrs(const vector<pll> &konveks)
{
    ll p = 0;
    ll n = konveks.size();
    for (ll i = 0; i < n; i++)
    {
        ll j = (i + 1) % n;
        p += konveks[i].first * konveks[j].second - konveks[j].first * konveks[i].second;
    }
    return abs(p);
}

ll reshi(vector<pll> &kord)
{
    vector<pll> origigi = omotac(kord);

    if (origigi.size() > 2500)
    {
        ll res = inf, p = 0, sled, prosla, tp, i, n = kord.size();
        for (i = 0; i < n; i++)
        {
            prosla = (i - 1);
            if (prosla < 0)
            {
                prosla = n - 1;
            }
            sled = (i + 1) % n;
            tp = p;
            tp -= (kord[i].fi) * (kord[sled].se);
            tp += (kord[sled].fi) * (kord[i].se);
            tp -= (kord[prosla].fi) * (kord[i].se);
            tp += (kord[i].fi) * (kord[prosla].se);

            tp += (kord[prosla].fi) * (kord[sled].se);
            tp -= (kord[sled].fi) * (kord[prosla].se);
            if (tp < 0)
            {
                tp *= -1;
            }
            res = min(res, tp / 2);
        }
        return res;
    }
    ll res = inf;
    for (pll &osim : origigi)
    {
        vector<pll> ostali;
        for (pll &p : kord)
        {
            if (p != osim)
            {
                ostali.push_back(p);
            }
        }
        vector<pll> novi = omotac(ostali);

        ll tren = povrs(novi);
        res = min(res, tren);
    }
    return res;
}
// I UNDERSTAND IT NOW
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    // ako neko cita ovo
    // cao brate
    ll n, i;
    cin >> n;

    vector<pll> kord(n);
    for (i = 0; i < n; i++)
    {
        cin >> kord[i].first >> kord[i].second;
    }

    ll res = reshi(kord);
    cout << res / 2 << endl;
}