#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

struct coord
{
	long long int x,y;
};
coord odredjeni;

bool cmp(coord prvi, coord drugi)
{
	coord pomprvi = prvi;
	coord pomdrugi = drugi;
	pomprvi.x-=odredjeni.x;
	pomprvi.y-=odredjeni.y;
	pomdrugi.x-=odredjeni.x;
	pomdrugi.y-=odredjeni.y;
	if(pomprvi.x*pomdrugi.y-pomdrugi.x*pomprvi.y>0) return true;
	
	return false;
}

int main(int argc, char** argv) {
	ios_base::sync_with_stdio(false);
	
	long long int n;
	cin >>n;
	vector<coord> v(n);
	long long int k=0;
	for(long long int i=0;i<n;i++)
	{
		cin >>v[i].x>>v[i].y;
		
		if(v[i].y<v[k].y)
		{
			k=i;
		}
		else if(v[i].y==v[k].y && v[i].x<v[k].x )
		{
			k=i;
		}
	}
	swap(v[0],v[k]);
	odredjeni=v[0];
	sort(v.begin()+1,v.end(),cmp);
	vector<int> pozicija(2);
	pozicija[0]=0;
	pozicija[1]=1;
	vector<coord> convex(2);
	//cout <<v[0].x<<" "<<v[0].y<<"\n";
	convex[0]=v[0];
	convex[1]=v[1];
	for(long long int i=2;i<n;i++)
	{
		coord pomprvi = convex[convex.size()-2];
		coord pomdrugi = v[i];
		pomprvi.x-=convex[convex.size()-1].x;
		pomprvi.y-=convex[convex.size()-1].y;
		pomdrugi.x-=convex[convex.size()-2].x;
		pomdrugi.y-=convex[convex.size()-2].y;
		if(pomprvi.x*pomdrugi.y-pomdrugi.x*pomprvi.y>0)
		{
			convex.pop_back();
			pozicija.pop_back();
			i--;
		}
		else
		{
			pozicija.push_back(i);
			convex.push_back(v[i]);
		}
	}
	/*cout <<"----\n";
	for(int i=0;i<convex.size();i++)
	{
		cout<<convex[i].x<<" "<<convex[i].y<<"\n";
	}*/
	unsigned long long int rez=0;
	
	for(int i=1;i<convex.size()-1;i++)
	{
		coord pomprvi = convex[i];
		coord pomdrugi = convex[i+1];
		pomprvi.x-=convex[0].x;
		pomprvi.y-=convex[0].y;
		pomdrugi.x-=convex[0].x;
		pomdrugi.y-=convex[0].y;
		//cout <<abs(pomprvi.x*pomdrugi.y-pomdrugi.x*pomprvi.y)/2<<"\n";
		unsigned long long int pom=abs(pomprvi.x*pomdrugi.y-pomdrugi.x*pomprvi.y)/2;
		rez+=pom;
		//mx=max(mx,pom);
	}
	unsigned long long int mx=0;
	
	for(int i=1;i<convex.size()-1;i++)
	{
		int l=pozicija[i-1];
		int r=pozicija[i+1];
		coord pret=v[pozicija[i-1]];
		unsigned long long int br=0;
		for(int j=l+1;j<=r;j++)
		{
			if(j!=pozicija[i])
			{
				coord pom1 = convex[i+1];
				coord pom2 = v[j];
				pom1.x-=convex[i-1].x;
				pom1.y-=convex[i-1].y;
				pom2.x-=convex[i-1].x;
				pom2.y-=convex[i-1].y;
				if(pom1.x*pom2.y-pom2.x*pom1.y<=0)
				{
					
					coord pomprvi = pret;
					coord pomdrugi = v[j];
					pomprvi.x-=convex[i].x;
					pomprvi.y-=convex[i].y;
					pomdrugi.x-=convex[i].x;
					pomdrugi.y-=convex[i].y;
					br+=abs(pomprvi.x*pomdrugi.y-pomdrugi.x*pomprvi.y)/2;
					pret=v[j];
				}
			}
			
		}
		mx=max(mx,br);
	}
	coord pret = v[0];
	unsigned long long int br=0;
	for(int i=n-2;i>=pozicija[convex.size()-2];i--)
	{
		coord pomprvi = pret;
		coord pomdrugi = v[i];
		pomprvi.x-=convex[convex.size()-1].x;
		pomprvi.y-=convex[convex.size()-1].y;
		pomdrugi.x-=convex[convex.size()-1].x;
		pomdrugi.y-=convex[convex.size()-1].y;
		br+=abs(pomprvi.x*pomdrugi.y-pomdrugi.x*pomprvi.y)/2;
		pret=v[i];
	}
	mx=max(mx,br);
	pret = v[1];
	br=0;
	for(int i=2;i<n;i++)
	{
		coord pom1 = v[n-1];
		coord pom2 = v[i];
		pom1.x-=v[1].x;
		pom1.y-=v[1].y;
		pom2.x-=v[1].x;
		pom2.y-=v[1].y;
		if(pom1.x*pom2.y-pom2.x*pom1.y>=0)
		{
			coord pomprvi = pret;
			coord pomdrugi = v[i];
			pomprvi.x-=v[0].x;
			pomprvi.y-=v[0].y;
			pomdrugi.x-=v[0].x;
			pomdrugi.y-=v[0].y;
			
			br+=abs(pomprvi.x*pomdrugi.y-pomdrugi.x*pomprvi.y)/2;
			pret=v[i];
		}
	}
	mx=max(mx,br);
	/*unsigned long long int br=0;
	pret=v[0];
	for(int i=n-2;i>=;i++)
	{
		
	}*/
	
	//cout <<mx<<"\n";
	//cout <<rez<<"\n";
	cout <<rez-mx<<"\n";
	return 0;
}