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;
struct point {
  int x, y;
};
struct line {
  double k, b;
};
point a[309];
double maxs[2];
double mins[2];
int n;
double sqr(double a) { return a * a; }
double dist(point a, point b) { return sqrt(sqr(a.x - b.x) + sqr(a.y - b.y)); }
double vecmul(point a, point b) { return a.x * b.y - a.y * b.x; }
double calc(int x, int y, int z) {
  point m, n;
  m.x = a[x].x - a[y].x;
  m.y = a[x].y - a[y].y;
  n.x = a[z].x - a[y].x;
  n.y = a[z].y - a[y].y;
  return fabs(vecmul(m, n)) / 2.0;
}
line mline(point x, point y) {
  line re;
  re.k = (y.y - x.y) / (double)(y.x - x.x);
  re.b = x.y - x.x * re.k;
  return re;
}
bool check(int x, int y, int z) {
  line t = mline(a[x], a[y]);
  line cur;
  cur.k = t.k;
  cur.b = a[z].y - a[z].x * cur.k;
  return cur.b < t.b;
}
int main() {
  cin >> n;
  double maxsum = -1;
  for (int i = 1; i <= n; i++) cin >> a[i].x >> a[i].y;
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) {
      maxs[0] = 0;
      maxs[1] = 0;
      mins[0] = 2147483647;
      mins[1] = 2147483647;
      for (int k = 1; k <= n; k++)
        if ((k != i) && (k != j)) {
          bool flag = check(i, j, k);
          double s = calc(i, j, k);
          maxs[flag] = max(maxs[flag], s);
          mins[flag] = min(mins[flag], s);
        }
      double sum = 0;
      if ((maxs[0] == 0) && (maxs[1] != 0))
        sum = maxs[1] - mins[1];
      else if ((maxs[1] == 0) && (maxs[0] != 0))
        sum = maxs[0] - mins[0];
      else
        sum = maxs[1] + maxs[0];
      maxsum = max(maxsum, sum);
    }
  printf("%.10lf\n", maxsum);
  return 0;
}