/* Jozef Tvarozek - Privatizacia */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define MAXN 50005
#define EPS 0.000001

typedef struct
{
  double x,y;
} POINT;

POINT p[MAXN];
POINT hull[MAXN+MAXN+4];
int np,m;
/// trojuholnik
int p1,p2,p3;
double space;

int dir[14][3] = {{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1},
{1,1,1},{-1,-1,-1},{1,1,0},{-1,-1,0},{0,1,1},{0,-1,-1},{1,0,1},{-1,0,-1}};

double ccw(POINT a,POINT b,POINT c)
{
  double d = a.x*b.y+b.x*c.y+c.x*a.y-c.x*b.y-b.x*a.y-a.x*c.y;
  return d;
}

int rise(void)
{
  int i,j,k,found = 0,np1,np2,np3;
  double dbest;

  for (i = 0; i < 14; i++)
  {
    np1=p1+dir[i][0]; np2=p2+dir[i][1]; np3=p3+dir[i][2];
    if ( np1 == m ) np1 = 0; if ( np1 < 0 ) np1 = m-1;
    if ( np2 == m ) np2 = 0; if ( np2 < 0 ) np2 = m-1;
    if ( np3 == m ) np3 = 0; if ( np3 < 0 ) np3 = m-1;
    dbest = fabs(ccw(hull[np1],hull[np2],hull[np3]));
    if ( dbest > space+EPS )
    {
//      printf("U");
      p1 = np1; p2 = np2; p3 = np3; found = 1;
      space = dbest;
    }
  }
  if ( found == 0 )
    for (i = -10; i <= 10; i++)
      for (j = -10; j <= 10; j++)
        for (k = -10; k <= 10; k++)
        {
          np1=(100*m+p1+i)%m; np2=(100*m+p2+j)%m; np3=(100*m+p3+k)%m;
          dbest = fabs(ccw(hull[np1],hull[np2],hull[np3]));
          if ( dbest > space+EPS )
          {
//            printf(".");
//            printf("%d %d %d [%d]\n",p1,p2,p3,m);
            p1 = np1; p2 = np2; p3 = np3; found = 1;
            space = dbest;
          }
        }

  return found;
}
int point_cmp(const void *va, const void *vb)
{
  POINT *pa = (POINT*)va, *pb = (POINT*)vb;
  if ( pa->x > pb->x ) return 1;
  if ( pa->x < pb->x ) return -1;
  if ( pa->y > pb->y ) return 1;
  return -1;
}
int main(void)
{
  FILE *fin,*fout;
  int i;
  double d = 0.0;

  fin = fopen("pri.in","rt");
  fout = fopen("pri.out","wt");

  fscanf(fin,"%d",&np);
  for (i = 0; i < np; i++)
  {
    fscanf(fin,"%lf %lf",&p[i].x,&p[i].y);
//    p[i].x += (8-rand()%4)*EPS;
//    p[i].y += (8-rand()%4)*EPS;
  }
  qsort(&p,np,sizeof(POINT),point_cmp);
//  printf("body:\n");
//  for (i = 0; i < np; i++)
//    printf("%.3lf %.3lf\n",p[i].x,p[i].y);

  if ( np < 3 )
  {
    fprintf(fout,"0.00\n");
    return 0;
  }
  hull[0] = p[0];
  hull[1] = p[1];
  m = 2;
  for (i = 2; i < np; i++)
  {
    while (( m >= 2 )&&( ccw(hull[m-2],hull[m-1],p[i]) < -EPS ))
      m--;
    hull[m++] = p[i];
  }
  for (i = np-2; i >= 0; i--)
  {
    while (( m >= 2 ) && ( ccw(hull[m-2],hull[m-1],p[i]) < -EPS ))
      m--;
    hull[m++] = p[i];
  }
  m--;
//  printf("hull\n");
//  for (i = 0; i < m; i++)
//    printf("%.3lf %.3lf\n",hull[i].x,hull[i].y);
  p1 = 0; p2 = m/3; p3 = (m-m/3)%m;
  space = fabs(ccw(hull[p1],hull[p2],hull[p3]));

  while ( rise() );
  
  fprintf(fout,"%.2lf\n",space/2.0);
//  printf("%.2lf\n",space/2.0);
  return 0;
}
