#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;

#define eps 0.000001
#define pi 3.14159265359

struct tacka {
    double x,y;
} t[2222];

int ddl;

double ugao(double x, double y) {
    if (fabs(y) < eps) return 0.0;
    if (fabs(x) < eps) {
      return pi/double(2);
    }

    return (atan(y/x));
}

bool cmp(tacka a, tacka b) {
    //printf("cmp -> %.2lf  %.2lf      %.2lf  %.2lf\n", a.x, a.y, b.x, b.y);
    if (fabs(a.y - t[ddl].y) < eps) {
        if (fabs(b.y - t[ddl].y) < eps) {
            if (a.x < b.x) return true;
            else return false;
        } else return true;
    }
    if (fabs(b.y - t[ddl].y) < eps) return false;

    double u1,u2;
    u1 = ugao(a.x - t[ddl].x,a.y - t[ddl].y);
    u2 = ugao(b.x - t[ddl].x,b.y - t[ddl].y);
    //printf("---->   u1 = %.3lf   u2=%.3lf\n", u1, u2);
    if (fabs(u1-u2) < eps) {
       //printf("uso\n");
       if (fabs(a.x-b.x) < eps) return (a.y < b.y);
       else return (a.x < b.x);
    }
    return ( u1 < u2 );
}

double vp(double x1, double y1, double x2, double y2, double x3, double y3) {
    return ( (x2-x1)*(y3-y2) - (y2-y1)*(x3-x2) );
}

// levo -> VP za tacke
double levo(int t1, int t2, int t3) {
    printf(" vp(%d,%d,%d) -> %.3lf\n", t1, t2, t3, vp(t[t1].x, t[t1].y, t[t2].x, t[t2].y, t[t3].x, t[t3].y));
    if ( vp(t[t1].x, t[t1].y, t[t2].x, t[t2].y, t[t3].x, t[t3].y) > 0 ) return true;
    else return false;
}

double dist(double x1, double y1, double x2, double y2) {
    return ( sqrt ( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) ) );
}

int main() {

    int n,i,j,k,ck,br0,d[2222],ch[2222];
    double p1,p2,pp,pd,vpp,maxp,maxd;
    FILE *ff=fopen("farmeri.in","r"), *gg=fopen("farmeri.out","w");

    fscanf(ff,"%d", &n);
    //scanf("%d", &n);
    ddl=0;
    for(i=0; i<n; i++) {
        fscanf(ff,"%lf%lf", &t[i].x, &t[i].y);
        //scanf("%lf%lf", &t[i].x, &t[i].y);
        if (t[i].y < t[ddl].y || (fabs(t[i].y-t[ddl].y)<eps && t[i].x < t[ddl].x)) ddl=i;
    }

    //printf(" ---->   %.3lf\n", vp(0,0,5,5,5,10));

    maxp=0;
    if (n<=406) {
      for(i=0; i<n; i++)
        for(j=i+1; j<n; j++) {
           p1=-1; p2=-1; br0=0;
           for(k=0; k<n; k++) {
              vpp=vp(t[i].x, t[i].y, t[j].x, t[j].y, t[k].x, t[k].y);
              if ( fabs(vpp) < eps ) {
                 br0++;
              } else {
                 if ( vpp < 0 ) {
                    pp = fabs(vpp) / double(2);
                    if (pp > p1) p1=pp;
                 } else {
                    pp = fabs(vpp) / double(2);
                    if (pp > p2) p2=pp;
                 }
              }
           }

           //printf("---> %d %d\n", i, j);
           //printf("   %.3lf %.3lf    (%d)\n", p1, p2, br0);

           if (p1>-1 && p2>-1) {
             if ( p1+p2 > maxp ) maxp=p1+p2;
           } else if (p1>-1) {
              if (p1>maxp && br0>2) maxp=p1;
           } else if (p2>-1) {
              if (p2>maxp && br0>2) maxp=p2;
           }
        }

      fprintf(gg,"%.3lf\n", maxp);
    } else {

       for(i=0; i<n; i++) {
          maxd=-1; d[i]=i;
          for(j=0; j<n; j++) {
            pd = dist(t[i].x, t[i].y, t[j].x, t[j].y);
            if (pd > maxd) {
               maxd=pd;
               d[i]=j;
            }
          }
       }

       for(i=0; i<n; i++) {
           j = d[i];
           p1=-1; p2=-1; br0=0;
           for(k=0; k<n; k++) {
              vpp=vp(t[i].x, t[i].y, t[j].x, t[j].y, t[k].x, t[k].y);
              if ( fabs(vpp) < eps ) {
                 br0++;
              } else {
                 if ( vpp < 0 ) {
                    pp = fabs(vpp) / double(2);
                    if (pp > p1) p1=pp;
                 } else {
                    pp = fabs(vpp) / double(2);
                    if (pp > p2) p2=pp;
                 }
              }
           }

           if (p1>-1 && p2>-1) {
             if ( p1+p2 > maxp ) maxp=p1+p2;
           } else if (p1>-1) {
              if (p1>maxp && br0>2) maxp=p1;
           } else if (p2>-1) {
              if (p2>maxp && br0>2) maxp=p2;
           }
       }

       fprintf(gg,"%.3lf\n", maxp);
    }

    /*sort(t,t+n,cmp);

    ch[0]=0; ch[1]=1; ck=2;
    for(i=2; i<n; i++) {
       if ( levo(ch[ck-2],ch[ck-1],i) ) {
          ck++;
          ch[ck-1]=i;
       } else {
          ch[ck-1]=i;
       }
    }*/

    //printf("convex hull:\n");
    //for(i=0; i<ck; i++) printf("%.2lf %.2lf\n", t[ch[i]].x, t[ch[i]].y);


    fclose(ff); fclose(gg);
    return 0;
}
