#include<fstream.h>
#include<iomanip.h>
#include<math.h>
long x[110000],y[110000],b[110000],a[110000],sol[110000];
double xx[110000],yy[110000];
double distance(long i1, long i2)
{
double l;
l=(x[i1]-x[i2])*(x[i1]-x[i2])+(y[i1]-y[i2])*(y[i1]-y[i2]);
return l;
}
void qs(long i, long j)
{
long s=i,d=j,piv=a[(i+j)>>1],aux;
while(s<=d)
{
while((y[a[s]]-y[1])*(x[piv]-x[1])<(y[piv]-y[1])*(x[a[s]]-x[1])||(y[a[s]]-y[1])*(x[piv]-x[1])==(y[piv]-y[1])*(x[a[s]]-x[1])&&distance(a[s],1)<distance(piv,1))
s++;
while((y[a[d]]-y[1])*(x[piv]-x[1])>(y[piv]-y[1])*(x[a[d]]-x[1])||(y[a[d]]-y[1])*(x[piv]-x[1])==(y[piv]-y[1])*(x[a[d]]-x[1])&&distance(a[d],1)>distance(piv,1))
d--;
if(s<=d)
{
aux=a[s];
a[s]=a[d];
a[d]=aux;
s++;
d--;
}
}
if(s<j)
qs(s,j);
if(i<d)
qs(i,d);
}
long det(long i1, long i2, long i3)
{
long r=x[i1]*y[i2]+x[i2]*y[i3]+x[i3]*y[i1]-y[i2]*x[i3]-y[i3]*x[i1]-y[i1]*x[i2];
return r;
}
int main()
{
long i,j,k=0,n,t=0,inc,sf,aux,i1,i2,i0,uup,up,down,dwn,st,dr;
double s,smax,numa,numi,l,lmax,sst,ddr,tg,sin,cos;
ifstream f("rubarba.in");
ofstream g("rubarba.out");
f>>n;
inc=1;
for(i=1;i<=n;i++)
{
f>>x[i]>>y[i];
if(x[i]<x[inc]||x[i]==x[inc]&&y[i]<y[inc])
inc=i;
}
if(n==1||n==2)
{
g<<"0.00";
return 0;
}
if(n==3)
{
g<<fixed<<setprecision(2)<<(float)abs(det(1,2,3));
return 0;
}
aux=x[1];
x[1]=x[inc];
x[inc]=aux;
aux=y[1];
y[1]=y[inc];
y[inc]=aux;
for(i=2;i<=n;i++)
if(x[i]!=x[1])
a[++k]=i;
else
b[++t]=i;
qs(1,k);
sf=1;
for(i=2;i<=t;i++)
if(y[b[i]]>y[b[sf]])
sf=i;
sol[1]=1;
sol[2]=a[1];
i=2;j=2;
while(j<=k)
{
while(det(sol[i-1],sol[i],a[j])<=0&&i>1)
i--;
sol[++i]=a[j++];
}
if(t)
{
while(det(sol[i-1],sol[i],b[sf])<=0&&i>1)
i--;
sol[++i]=b[sf];
}
if(i==1||i==2)
{
g<<"0.00";
return 0;
}
if(i==3)
{
g<<fixed<<setprecision(2)<<(float)abs(det(sol[1],sol[2],sol[3]));
return 0;
}
smax=(1<<30);
for(j=1;j<=i;j++)
{
}
g<<fixed<<setprecision(2)<<smax;
return 0;
}