#include <bits/stdc++.h>
using namespace std;

struct T {
    long long x, y;
    bool operator < (const T & p) const {
        return x < p.x || (x == p.x && y < p.y);
    }
};

long long op(const T & a, const T & b, const T & c) {
    return (b.y - a.y) * (c.x - b.x) - (b.x - a.x) * (c.y - b.y);
}

vector<T> ko(vector<T> & ta) {
    sort(ta.begin(), ta.end());
    vector<T> o;

	for (const auto & p : ta) {
        while (o.size() >= 2 && op(o[o.size() - 2], o.back(), p) <= 0) {
            o.pop_back();
        }
        o.push_back(p);
    }

	size_t dv = o.size();
    for (int i = ta.size() - 2; i >= 0; --i) {
        while (o.size() > dv && op(o[o.size() - 2], o.back(), ta[i]) <= 0) {
            o.pop_back();
        }
        o.push_back(ta[i]);
    }

    o.pop_back(); 
    return o;
}

long long pp(const vector<T> & po) {
    long long p = 0;
    int n = po.size();
    for (int i = 0; i < n; ++i) {
        int j = (i + 1) % n;
        p += po[i].x * po[j].y - po[j].x * po[i].y;
    }
    return abs(p) / 2;
}

int main() {
    int N;
    cin >> N;
    vector<T> t(N);

    for (int i = 0; i < N; ++i) {
        cin >> t[i].x >> t[i].y;
    }

    vector<T> co = ko(t);
    long long np = pp(co);

    for (int i = 0; i < N; ++i) {
        vector<T> st;
        for (int j = 0; j < N; ++j) {
            if (i != j) {
                st.push_back(t[j]);
            }
        }
        vector<T> no = ko(st);
        long long p = pp(no);
        np = min(np, p);
    }

	cout << np << endl;

    return 0;
}