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

5
2 4
18 10
6 20
14 12
20 4


7
4 18
18 10
6 18
8 4
2 4
14 10
16 6

4
897759290 91195278
3106330 824428456
356965620 543776038
745791392 570501492
*/


struct tacka {
    long long x, y;
};

void ispisi(vector<tacka> d){
	for (int i=0;i<d.size();i++){
		cout<<d[i].x<<" "<<d[i].y<<'\n';
	}
	cout<<'\n';
}

bool compare(tacka& a,tacka& b) {
    if (a.x==b.x) return a.y < b.y;
    return a.x<b.x;
}

long long funkc(tacka& a, tacka& b, tacka& c) {
    return (b.x-a.x)*(c.y-a.y)-(b.y-a.y)*(c.x-a.x);
}

long long povrsina(vector<tacka>& d) {
    long long a=0;
    int n=d.size();
    for (int i=0;i<n;i++) {
        a+=d[i].x*d[(i+1) % n].y-d[i].y*d[(i+1) % n].x;
    }
    return abs(a)/2;
}

// za 1,3,4 grupu
vector<tacka> graham(vector<tacka>& tacke) {
    sort(tacke.begin(), tacke.end(), compare);
    vector<tacka> d;
	int m=tacke.size();

    for (int i=0;i<m;i++){
        while ((d.size()>=2) and (funkc(d[d.size()-2],d[d.size() - 1], tacke[i]))<=0) {
            d.pop_back();
        }
        d.push_back(tacke[i]);   	
	}

    int n=d.size();
    for (int i=m-2;i>=0;i--) {
        while (d.size()>n && funkc(d[d.size() - 2], d[d.size() - 1], tacke[i]) <= 0) {
            d.pop_back();
        }
        d.push_back(tacke[i]);
//        cout<<d.size()<<" "<<tacke[i]<<endl<<endl;
    }

    d.pop_back();
    return d;
}

// za 5. podgrupu
vector<tacka> jarvis(vector<tacka>& tacke) {
    int n=tacke.size();
    vector<tacka> d;
    int L=0;

    for (int i=1;i<n;i++) {
		if (tacke[i].x<tacke[L].x or (tacke[i].x==tacke[L].x and tacke[i].y<tacke[L].y)) {
    		L=i;
//    		cout<<L<<endl;
		}
    }

    int p=L,q;
//    cout<<"L: "<<L<<endl;
    do {
        d.push_back(tacke[p]);
        q=(p+1)%n;
//        cout<<"q: "<<q<<endl;
        for (int i=0;i<n;i++) {
            if (funkc(tacke[p],tacke[q],tacke[i])>0) {
                q=i;
            }
        }
        p=q;
    } while (p!=L);
	
    return d;
}

int main() {
	
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
    int n;
    cin >> n;
    vector<tacka> tacke(n);
    for (int i=0;i<n;i++) {
        cin>>tacke[i].x>>tacke[i].y;
    }

    long long rez=LLONG_MAX;

    for (int i=0;i<n;i++) {
        vector<tacka> tr;
        for (int j = 0; j < n; j++) {
            if (i!=j) tr.push_back(tacke[j]);
        }

        vector<tacka> d;
        if (tr.size()>3000) {
            d=jarvis(tr);
//        	ispisi(tr);
		}
		else {
            d=graham(tr);
//            ispisi(tr);
        }

        rez=min(rez,povrsina(d));
    }

    cout<<rez<<'\n';
    return 0;
}