#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <climits>

using namespace std;

int main() 
{
    int n, levi, p, q, skip, i, next;
    long long minimalna_povrsina, povrsina, vrednost;
    cin >> n;

    vector<pair<long long, long long>> tacke(n), omot;
    for (i = 0; i < n; i++) 
    {
        cin >> tacke[i].first >> tacke[i].second;
    }

    if (n < 3)
    {
        cout << 0 << endl;
        return 0;
    }

    levi = 0;
    for (i = 1; i < n; i++) 
    {
        if (tacke[i].first < tacke[levi].first)
            levi = i;
    }

    p = levi;
    
    do 
    {
        omot.push_back(tacke[p]);
        q = (p + 1) % n;
        for (i = 0; i < n; i++) 
        {
            vrednost = (tacke[i].second - tacke[p].second) * (tacke[q].first - tacke[i].first) - (tacke[i].first - tacke[p].first) * (tacke[q].second - tacke[i].second);
            if (vrednost > 0) q = i;
        }
        p = q;
    } while (p != levi);

    minimalna_povrsina = LLONG_MAX;
    
    for (skip = 0; skip < omot.size(); skip++)
    {
        povrsina = 0;
        for (i = 0; i < omot.size(); i++)
        {
            if (i == skip) continue;
            next = (i + 1) % omot.size();
            if (next == skip) next = (next + 1) % omot.size();
            povrsina += omot[i].first * omot[next].second - omot[next].first * omot[i].second;
        }
        povrsina = abs(povrsina) / 2;
        minimalna_povrsina = min(minimalna_povrsina, povrsina);
    }

    cout << minimalna_povrsina << endl;

    return 0;
}