#include <stdio.h>
#include <math.h>
struct tacka
{
    double x,y;
};
double duzina(tacka a,tacka b)
{
    return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));   
}
double povrsina(tacka a,tacka b,tacka c)
{
    double a1=duzina(a,b);
    double b1=duzina(a,c);
    double c1=duzina(b,c);
    double s=(a1+b1+c1)/2;
    double p=sqrt(s*(s-a1)*(s-b1)*(s-c1));      
    return p;
}
int gore(tacka T,tacka a,tacka b)
{
    double k=(b.y-a.y)/(b.x-a.x);
    double n=((a.y*b.x)-(b.y-a.x))/(b.x-a.x);
    if(T.y>(k*T.x+n))
    {
        return 1;
    }
    return 0;
}
int main()
{
    freopen("farmeri.in","r",stdin);
    freopen("farmeri.out","w",stdout);
    int n;
    scanf("%d",&n);
    tacka niz[205];
    for(int i=0; i<n; i++)
    {
        scanf("%lf%lf",&(niz[i].x),&(niz[i].y));
    }
    
    double najbolja=0;
    for(int i=0; i<n; i++)
    {
        for(int j=(i+1); j<n; j++)
        {
            double najG=0;
            double najD=0;
            for(int k=0; k<n; k++)
            {
                if((k!=i) && (k!=j))
                {
                    double p=povrsina(niz[i],niz[j],niz[k]);                           
                    if(gore(niz[k],niz[i],niz[j]) && (p>najG))
                    {                        
                        najG=p;                       
                    }
                    if((!gore(niz[k],niz[i],niz[j])) && (p>najD))
                    {
                        najD=p;                           
                    }
                }
            }
            
            if((najG+najD)>najbolja)
            {
                najbolja=(najG+najD);                                    
            }
            
        }
    }
    
    printf("%.3lf\n",najbolja);
    
}
