#include<stdio.h>
#include<algorithm>
#include<math.h>
#define Nmax 100010
#define Inf 1<<30
#define ll long long
using namespace std;
struct punct { int x , y ; double panta ; } v[Nmax], s[Nmax], o, aux ;
int i,n,a,b,h,ls,ld,N,poz ;
double lungime, latime, Arie ;
int cmp ( punct a, punct b)
{
if( a.panta == b.panta ) return a.x < b.x;
return a.panta < b.panta;
}
int convex ()
{
punct a,b,c;
ll S;
a=s[N-1]; b=s[N]; c=v[i];
S = (ll)1 * ( a.x - c.x ) * ( b.y - a.y ) + (ll)1 * ( a.x - b.x ) * ( a.y - c.y ) ;
return ( S > 0 );
}
int next ( int i )
{
if( i < N ) return i + 1 ;
return 1 ;
}
int prev ( int i )
{
if ( i > 1 ) return i - 1 ;
return N ;
}
int semn( int a, int b, int c, int d )
{
punct ab,cd ;
ab.x = s[b].x - s[a].x ;
ab.y = s[b].y - s[a].y ;
cd.x = s[d].x - s[c].x ;
cd.y = s[d].y - s[c].y ;
ll S = (ll)1 * ab.x * cd.x + (ll)1 * ab.y * cd.y ;
if( S >= 0 ) return 1 ;
return -1 ;
}
double dist ( int i, int j )
{
double a = (double)(s[i].x - s[j].x) ;
double b = (double)(s[i].y - s[j].y) ;
long double d = (long double)a*a + (long double)b*b ;
return sqrt( (double)d );
}
double pdist ( int i, int p, int q )
{
if( s[p].x == s[q].x )
return abs( s[i].x - s[p].x );
if( s[p].y == s[q].y )
return abs(s[i].y - s[p].y ) ;
double a = (double)(s[q].y - s[p].y) ;
double b = (double)(s[p].x - s[q].x) ;
double c = -s[p].x * a - s[p].y * b ;
return (double)(fabs( a * s[i].x + b * s[i].y + c ) ) / (dist(p,q)) ;
}
int bsearch ( int a, int b )
{
int s = 1 , d = N - 2 , m, r, p ;
for( m = (s+d)>>1 ; s <= d ; m = (s+d)>>1 )
{
p = ( b + m ) % N ; if ( !p ) p = N ;
if( semn( a, b, next(p), p ) > 0 ) { r = p ; s = m + 1 ; }
else d = m - 1 ;
}
return r ;
}
int main()
{
freopen("rubarba.in","r",stdin);
freopen("rubarba.out","w",stdout);
scanf("%d",&n);
o.x = o.y = Arie = Inf ;
for( i = 1 ; i <= n ; i++ )
{
scanf("%d %d",&v[i].x,&v[i].y);
if( v[i].x < o.x || v[i].x == o.x && v[i].y < o.y )
o = v[i], poz = i ;
}
aux = v[1] ; v[1] = v[poz] ; v[poz] = aux ;
for( i = 2 ; i <= n ; i++ )
v[i].panta = (double)( v[i].y - o.y ) / ( v[i].x - o.x ) ;
sort(v+2,v+n+1,cmp);
s[1] = v[1] ; s[2] = v[2] ; N = 2 ;
for( i = 3 ; i <= n ; i++ )
{
while( !convex() && N > 2 ) N--;
s[++N] = v[i] ;
}
for( i = 1 ; i <= N ; i++ )
{
a = i ;
b = next(i) ;
ls = a ; if( semn ( a, prev(a), a, b ) < 0 ) ls = prev(a) ;
ld = b ; if( semn ( a, b, b, next(b) ) > 0 ) ld = next(b) ;
lungime = dist( ls, ld ) ;
h = bsearch(a,b) ;
latime = pdist(h,a,b);
if( lungime * latime < Arie )
Arie = lungime * latime ;
}
printf("%lf",Arie);
return 0 ;
}