Problem: Iahub has drawn a set of n points in the cartesian plane which he calls "special points". A quadrilateral is a simple polygon without self-intersections with four sides (also called edges) and four vertices (also called corners). Please note that a quadrilateral doesn't have to be convex. A special quadrilateral is one which has all four vertices in the set of special points. Given the set of special points, please calculate the maximal area of a special quadrilateral. 

Input

The first line contains integer n (4 ≤ n ≤ 300). Each of the next n lines contains two integers: xi, yi ( - 1000 ≤ xi, yi ≤ 1000) — the cartesian coordinates of ith special point. It is guaranteed that no three points are on the same line. It is guaranteed that no two points coincide. 

Output

Output a single real number — the maximal area of a special quadrilateral. The answer will be considered correct if its absolute or relative error does't exceed 10 - 9.

Examples

Input

5
0 0
0 4
4 0
4 4
2 3


Output

16.000000

Note

In the test example we can choose first 4 points to be the vertices of the quadrilateral. They form a square by side 4, so the area is 4·4 = 16.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
void Read(int &res) {
  char c = getchar();
  bool kt = false;
  if (c == '-') {
    kt = true;
    c = getchar();
  }
  while (c < '0' || c > '9') c = getchar();
  res = 0;
  while (c >= '0' && c <= '9') {
    res = res * 10 + (c - 48);
    c = getchar();
  }
  if (kt == 1) res = -res;
}
const int maxN = 305;
const long long mod = 1000000007;
struct point {
  int x, y;
} p[maxN];
double Max = 0;
int n;
void ABS(double &x) {
  if (x < 0) x = -x;
}
int CCW(point a, point b, point c) {
  int dx1, dx2, dy1, dy2;
  dx1 = b.x - a.x;
  dy1 = b.y - a.y;
  dx2 = c.x - a.x;
  dy2 = c.y - a.y;
  if (dy2 * dx1 == dy1 * dx2) return 0;
  if (dy2 * dx1 > dy1 * dx2) return 1;
  return -1;
}
double stg(point a, point b, point c) {
  double tmp = double(a.x - b.x) * (a.y + b.y) +
               double(b.x - c.x) * (b.y + c.y) +
               double(c.x - a.x) * (c.y + a.y);
  ABS(tmp);
  return tmp / 2;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> p[i].x >> p[i].y;
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j)
      if (i != j) {
        double Max1 = 0;
        double Max2 = 0;
        for (int k = 1; k <= n; ++k)
          if (k != i && k != j) {
            if (CCW(p[i], p[j], p[k]) == -1)
              Max1 = max(Max1, stg(p[i], p[j], p[k]));
            else
              Max2 = max(Max2, stg(p[i], p[j], p[k]));
            if (Max1 * Max2) Max = max(Max, Max1 + Max2);
          }
      }
  cout << setprecision(6) << fixed << Max << "\n";
  return 0;
}