#include <bits/stdc++.h>
using namespace std;
template <typename so>
void r(so &x) {
  x = 0;
  char c;
  long long dem = 0;
  for (c = getchar(); c < '0' || c > '9'; c = getchar()) {
    dem++;
    if (dem == 100) return;
  }
  for (; c >= '0' && c <= '9'; c = getchar()) {
    x = x * 10 + c - '0';
  }
}
const int MaxN = 301;
int n;
struct Poll {
  int x;
  int y;
};
Poll a[MaxN];
int dt[MaxN][MaxN][MaxN];
vector<Poll> gg(4);
void tinh(int &s, Poll A, Poll B, Poll C) {
  gg[0] = gg[3] = A;
  gg[1] = B;
  gg[2] = C;
  for (int i = 0; i < 3; i++) {
    s += (gg[i + 1].x - gg[i].x) * (gg[i].y + gg[i + 1].y);
  }
  s = abs(s);
}
struct Line {
  long long a;
  long long b;
  long long c;
};
vector<int> Side[MaxN][MaxN][2];
Line K;
void makeline(Poll A, Poll B) {
  K.a = A.y - B.y;
  K.b = B.x - A.x;
  K.c = 0 - (K.a * A.x + K.b * A.y);
}
int check(Poll A, Poll B, Line F) {
  long long ans = (F.a * A.x + F.b * A.y + F.c) * (F.a * B.x + F.b * B.y + F.c);
  if (ans == 0) {
    return -1;
  }
  if (ans > 0) {
    return 1;
  } else
    return 0;
}
void input() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> a[i].x >> a[i].y;
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      for (int k = 0; k < n; k++) {
        if (j == k || k == i) continue;
        tinh(dt[i][j][k], a[i], a[j], a[k]);
      }
    }
  }
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      int id = 0;
      for (int k = 0; k < n; k++) {
        if (k != i && k != j) {
          id = k;
          Side[i][j][0].push_back(k);
          break;
        }
      }
      makeline(a[i], a[j]);
      for (int k = id + 1; k < n; k++) {
        if (i == k || j == k) continue;
        int ca = check(a[id], a[k], K);
        if (ca == 1) {
          Side[i][j][0].push_back(k);
        } else if (ca == 0) {
          Side[i][j][1].push_back(k);
        }
      }
    }
  }
  int gtln = 0;
  for (int i = 0; i < n; i++) {
    for (int j = i + 1; j < n; j++) {
      int gtln1 = 0;
      int gtln2 = 0;
      if (Side[i][j][0].size() == 0 || Side[i][j][1].size() == 0) continue;
      for (auto x : Side[i][j][0]) {
        gtln1 = max(gtln1, dt[i][j][x]);
      }
      for (auto x : Side[i][j][1]) {
        gtln2 = max(gtln2, dt[i][j][x]);
      }
      gtln = max(gtln, gtln1 + gtln2);
    }
  }
  cout << setprecision(6) << fixed << double(gtln) / double(2) << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  input();
}
