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;
const long long mod = 1000000009;
const double eps = 1.0e-9;
const unsigned long long MAX_N = 301;
const int typeNum = 300;
long long x[MAX_N];
long long y[MAX_N];
long long getVal(int indexA, int indexB, int len) {
  long long max_val, min_val, val;
  max_val = numeric_limits<int>::min();
  min_val = numeric_limits<int>::max();
  long long x1, x2, y1, y2;
  x1 = x[indexB] - x[indexA];
  y1 = y[indexB] - y[indexA];
  for (unsigned int i = 0; i < (unsigned int)(len); ++i)
    if (i != indexA && i != indexB) {
      x2 = x[i] - x[indexA];
      y2 = y[i] - y[indexA];
      val = x1 * y2 - x2 * y1;
      max_val = max(max_val, val);
      min_val = min(min_val, val);
    }
  if (max_val * min_val <= 0) {
    val = max_val - min_val;
  } else {
    val = 0;
  }
  return val;
}
int main(int argc, char** argv) {
  long long n;
  cin >> n;
  for (unsigned int i = 0; i < (unsigned int)(n); ++i) {
    cin >> x[i] >> y[i];
  }
  long long val, max_val = 0;
  for (unsigned int i = 0; i < (unsigned int)(n); ++i)
    for (unsigned int j = (unsigned int)(i + 1); j < (unsigned int)(n); j++) {
      val = getVal(i, j, n);
      max_val = max(max_val, val);
    }
  printf("%.8lf\n", max_val / 2.0);
  return 0;
}