#include <bits/stdc++.h>
using namespace std;
typedef struct Ponto {
  int x;
  int y;
} Ponto;
double ccw(Ponto p1, Ponto p2, Ponto p3) {
  return ((p2.x - p1.x) * (p3.y - p1.y)) - ((p2.y - p1.y) * (p3.x - p1.x));
}
int areaTriangulo(Ponto p1, Ponto p2, Ponto p3) {
  return ((p1.x * p2.y + p1.y * p3.x + p2.x * p3.y) -
          (p2.y * p3.x + p1.x * p3.y + p1.y * p2.x)) /
         2;
}
int menor(Ponto p1, Ponto p2) {
  if (p1.y < p2.y) {
    return 1;
  } else if (p1.y == p2.y && p1.x < p2.x) {
    return 1;
  } else {
    return 0;
  }
}
int main() {
  int qtos;
  vector<Ponto> vetor;
  Ponto menorPonto;
  menorPonto.y = 1010;
  menorPonto.x = 1010;
  scanf("%d", &qtos);
  for (int x = 0; x < qtos; x++) {
    Ponto ponto;
    scanf("%d %d", &ponto.x, &ponto.y);
    vetor.push_back(ponto);
  }
  double maiorArea = -1;
  for (int k = 0; k < qtos; k++) {
    menorPonto = vetor.at(k);
    for (int i = 0; i < qtos; i++) {
      if (i == k) {
        continue;
      }
      Ponto pontoB = vetor.at(i);
      double maiorTrianguloSuperior = -1;
      double maiorTrianguloInferior = -1;
      for (int j = 0; j < qtos; j++) {
        if (i == j || j == k) {
          continue;
        } else {
          Ponto pontoC = vetor.at(j);
          double crossProduct = ccw(menorPonto, pontoB, pontoC);
          if (crossProduct > 0) {
            double triangleArea = crossProduct / 2;
            if (triangleArea > maiorTrianguloSuperior) {
              maiorTrianguloSuperior = triangleArea;
            }
          } else {
            double triangleArea = crossProduct / -2;
            if (triangleArea > maiorTrianguloInferior) {
              maiorTrianguloInferior = triangleArea;
            }
          }
        }
      }
      if (maiorTrianguloSuperior > 0 && maiorTrianguloInferior > 0) {
        double areaTeste = maiorTrianguloSuperior + maiorTrianguloInferior;
        if (areaTeste > maiorArea) {
          maiorArea = areaTeste;
        }
      }
    }
  }
  printf("%lf", maiorArea);
  return 0;
}
