#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int n,i,x,y,pct,stack[100005],nrs,j,st,dr;
long long a2_1,a2_2,b2_1,b2_2,a_1,a_2,b_1,b_2;
pair<int,int> v[100005];
pair<long double,long double> pmin,pmax;
long double sol,len,d,h,a2,b2,a,b,x2,y2;
struct cmp
{
inline bool operator()(const pair<int,int> &a,const pair<int,int> &b)const
{
if (a.first==x && a.second==y)
return 1;
if (b.first==x && b.second==y)
return 0;
if (a.first==x)
return 0;
if (b.first==x)
return 1;
return (long double)(a.second-y)/(a.first-x)<(long double)(b.second-y)/(b.first-x);
}
};
inline void simplify(long long &x,long long &y)
{
long long a=x,b=y,aux;
while (b)
{
aux=a;
a=b;
b=aux%b;
}
x/=a;
y/=a;
}
inline long double dist(pair<long double,long double> a,pair<long double,long double> b)
{
return sqrt((a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second));
}
inline bool opus(int dr1,int dr2,int pct)
{
if (v[dr1].first==v[dr2].first)
{
if (x==v[dr1].first)
return (v[dr1].second<v[dr2].second);
return (x<v[dr1].first && v[dr1].first<v[pct].first);
}
long double a,b,rez1,rezpct;
a=(long double)(v[dr1].second-v[dr2].second)/(v[dr1].first-v[dr2].first);
b=v[dr1].second-a*v[dr1].first;
rez1=a*x+b-y;
rezpct=a*v[pct].first+b-v[pct].second;
if (!rez1)
return (dist(v[1],v[dr1])<dist(v[1],v[dr2]));
return ((rez1>0 && rezpct<0) || (rez1<0 && rezpct>0));
}
inline bool egal(long double a,long double b)
{
return (abs(a-b)<0.0000000001);
}
inline bool maimic(pair<long double,long double> pct1,pair<long double,long double> pct2)
{
long double val1,val2;
val1=dist(pct1,v[stack[i]]);
if (egal(val1+len,dist(pct1,v[stack[i+1]])))
val1=-val1;
val2=dist(pct2,v[stack[i]]);
if (egal(val2+len,dist(pct2,v[stack[i+1]])))
val2=-val2;
return (val1<val2);
}
int main()
{
freopen("rubarba.in","r",stdin);
freopen("rubarba.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
{
scanf("%d %d",&x,&y);
v[i]=make_pair(x,y);
if (!pct || (x<v[pct].first || (x==v[pct].first && y<v[pct].second)))
pct=i;
}
x=v[pct].first;
y=v[pct].second;
sort(v+1,v+n+1,cmp());
stack[nrs=1]=1;
for (i=2;i<=n;++i)
{
while (nrs>=3 && opus(stack[nrs],stack[nrs-1],i))
--nrs;
stack[++nrs]=i;
}
stack[nrs+1]=1;
sol=-1;
for (i=1;i<=nrs;++i)
{
if (v[stack[i]]==v[stack[i+1]])
continue;
st=dr=h=0;
if (v[stack[i]].first==v[stack[i+1]].first)
{
for (j=1;j<=nrs;++j)
{
if (!st || v[stack[j]].second<v[st].second)
st=stack[j];
if (!dr || v[stack[j]].second>v[dr].second)
dr=stack[j];
if (abs(v[stack[j]].first-v[stack[i]].first)>h)
h=abs(v[stack[j]].first-v[stack[i]].first);
}
if ((v[dr].second-v[st].second)*h<sol || sol==-1)
sol=(v[dr].second-v[st].second)*h;
}
else
if (v[stack[i]].second==v[stack[i+1]].second)
{
for (j=1;j<=nrs;++j)
{
if (!st || v[stack[j]].first<v[st].first)
st=stack[j];
if (!dr || v[stack[j]].first>v[dr].first)
dr=stack[j];
if (abs(v[stack[j]].second-v[stack[i]].second)>h)
h=abs(v[stack[j]].second-v[stack[i]].second);
}
if ((v[dr].first-v[st].first)*h<sol || sol==-1)
sol=(v[dr].first-v[st].first)*h;
}
else
{
len=dist(v[stack[i]],v[stack[i+1]]);
for (j=1;j<=nrs;++j)
{
a2_1=v[stack[i+1]].first-v[stack[i]].first;
a2_2=v[stack[i]].second-v[stack[i+1]].second;
simplify(a2_1,a2_2);
b2_1=a2_2*v[stack[j]].second-a2_1*v[stack[j]].first;
b2_2=a2_2;
simplify(b2_1,b2_2);
a_1=v[stack[i]].second-v[stack[i+1]].second;
a_2=v[stack[i]].first-v[stack[i+1]].first;
simplify(a_1,a_2);
b_1=a_2*v[stack[i]].second-a_1*v[stack[i]].first;
b_2=a_2;
simplify(b_1,b_2);
b2=(long double)b2_1/b2_2;
b=(long double)b_1/b_2;
a2=(long double)a2_1/a2_2;
a=(long double)a_1/a_2;
x2=(long double)(b2-b)/(a-a2);
y2=a*x2+b;
if (!st || maimic(make_pair(x2,y2),pmin))
st=stack[j],
pmin=make_pair(x2,y2);
if (!dr || maimic(pmax,make_pair(x2,y2)))
dr=stack[j],
pmax=make_pair(x2,y2);
d=dist(v[stack[j]],make_pair(x2,y2));
if (d>h)
h=d;
}
d=dist(pmin,pmax)*h;
if (d<sol || sol==-1)
sol=d;
}
}
printf("%.2lf",(double)sol);
return 0;
}