#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

const int maxn=2000;
const double eps=1e-8;
const double infinite=1e30;
const double pi=3.141592653589; 

typedef struct
{ double x,y,angle;        
} point;

int n,noh,hull[maxn];
point p[maxn];



inline int different(int i,int j,int k=-1,int l=-2)
{
    return ( (i!=j) && (i!=k) && (i!=l) && (j!=k) && (j!=l) && (k!=l) );  
}



inline double area(int i,int j,int k,int l)
{
    double a=0;   
    a+=p[i].x*p[j].y-p[j].x*p[i].y;
    a+=p[j].x*p[k].y-p[k].x*p[j].y;    
    a+=p[k].x*p[l].y-p[l].x*p[k].y; 
    a+=p[l].x*p[i].y-p[i].x*p[l].y; 
    if (a<0) a=-a;   
    return a;       
}

inline double area(int i,int j,int k)
{
    double a=0;   
    a+=p[i].x*p[j].y-p[j].x*p[i].y;
    a+=p[j].x*p[k].y-p[k].x*p[j].y;    
    a+=p[k].x*p[i].y-p[i].x*p[k].y; 
    return a;       
}
int compare(const void *pa,const void *pb)
{
   point *a=(point*)pa,*b=(point*)pb;

  if ((a->angle)>(b->angle)) return 1;
  if ((a->angle)==(b->angle)) return 0;
  return -1;
}

int left(int a,int b,int j)
{
	double t=(p[b].x-p[a].x)*(p[j].y-p[a].y)-(p[b].y-p[a].y)*(p[j].x-p[a].x);
	if (t<-eps) return 1;
	if (t>eps) return -1; 
	return 0;
}

int main()
{
    int ts=clock();
    
    freopen("farmeri.in","r",stdin);
    freopen("farmeri.out","w",stdout);
        
    int i,j,k,l,nextl;
    double result,inter,bestleft,bestright;
    point pom;
        
    scanf("%d",&n);
    for(i=0;i<n;i++)
       scanf("%lf%lf",&(p[i].x),&(p[i].y));
 
 //------------------------
    p[0].angle=0;
    k=0;

    for(i=1;i<n;i++)
    {
      p[i].angle=0;
      if ( (p[k].y>p[i].y) || (((p[i].y-p[k].y)<eps)&&(p[k].x<p[i].x)) )
	     k=i;
    }

    pom=p[0];p[0]=p[k];p[k]=pom;

    for(i=1;i<n;i++)
    {
       p[i].x-=p[0].x;
       p[i].y-=p[0].y;
       p[i].angle=atan2(p[i].y,p[i].x);
       if (p[i].angle<0) p[i].angle+=2*pi;
    }

    p[0].x=0;p[0].y=0;p[0].angle=0;

    qsort(p,n,sizeof(point),compare);

    hull[0]=0;hull[1]=1;
    k=1;
  
  
    for(i=2;i<n;i++)
    {
       while ((k>=1) && (left(hull[k-1],hull[k],i)==1)) k--;
       k++;
       hull[k]=i;                    
    }

    while ((k>=1) && (left(hull[k-1],hull[k],hull[0])==1)) k--;

    k++;
 
    noh=k;
    
    result=-infinite;     
    if (noh>3)    
       for(i=0;i<noh;i++)
       {
          k=i+1;l=(i+3)%noh;
          for(j=i+2;j<noh;j++)
          {
             while (area(hull[i],hull[k],hull[j])<area(hull[i],hull[k+1],hull[j])) k++;
             nextl=(l+1)%noh;
             while (area(hull[i],hull[j],hull[l])<area(hull[i],hull[j],hull[nextl]))
                {l=nextl;nextl=(l+1)%noh;}                                   
             inter=area(hull[i],hull[k],hull[j])+area(hull[i],hull[j],hull[l]);
             if (inter>result) result=inter;                          
          }
       }
    else 
       for(i=0;i<n;i++)
          if (different(hull[0],hull[1],hull[2],i)) 
          {
             inter=area(hull[0],hull[1],hull[2],i);
             if (inter>result) result=inter;
             inter=area(hull[0],hull[1],i,hull[2]);
             if (inter>result) result=inter;
             inter=area(hull[0],i,hull[1],hull[2]);
             if (inter>result) result=inter;                                                                          
          }
           
    printf("%.3lf\n",result / 2);
    
    return 0;    
}
