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;
template <class T>
inline T GCD(T a, T b) {
  return b ? GCD(b, a % b) : a;
}
template <class T>
inline T LCM(T a, T b) {
  if (a < 0) return LCM(-a, b);
  if (b < 0) return LCM(a, -b);
  return a * (b / GCD(a, b));
}
void crossproduct(long long int x1, long long int y1, long long int x2,
                  long long int y2, long long int &z) {
  z = x1 * y2 - y1 * x2;
}
long long int dotproduct(long long int z1, long long int z2) { return z1 * z2; }
int sameside(long long int x1, long long int y1, long long int x2,
             long long int y2, long long int x3, long long int y3,
             long long int x, long long int y) {
  long long int a, b;
  crossproduct(x2 - x1, y2 - y1, x3 - x1, y3 - y1, a);
  crossproduct(x2 - x1, y2 - y1, x - x1, y - y1, b);
  if (dotproduct(a, b) >= 0)
    return 1;
  else
    return 0;
}
int main() {
  long long int n, x, y, refx, refy, areamul2, finalarea, maxarea = 0;
  cin >> n;
  vector<pair<long long int, long long int> > p;
  vector<long long int> areamul2vec1, areamul2vec2;
  double maxarea1;
  for (long long int i = 0; i < n; i++) {
    cin >> x >> y;
    p.push_back(make_pair(x, y));
  }
  for (long long int i = 0; i < n; i++) {
    for (long long int j = i + 1; j < n; j++) {
      refx = p[i].first;
      refy = p[i].second + 1;
      for (long long int k = 0; k < n; k++) {
        if (k != j && k != i) {
          areamul2 = abs((p[j].first * p[i].second - p[i].first * p[j].second) +
                         (p[k].first * p[j].second - p[j].first * p[k].second) +
                         (p[i].first * p[k].second - p[k].first * p[i].second));
          if (sameside(p[i].first, p[i].second, p[j].first, p[j].second,
                       p[k].first, p[k].second, refx, refy)) {
            areamul2vec1.push_back(areamul2);
          } else {
            areamul2vec2.push_back(areamul2);
          }
        }
      }
      if (areamul2vec1.size() != 0 && areamul2vec2.size() != 0) {
        finalarea = *max_element(areamul2vec1.begin(), areamul2vec1.end()) +
                    *max_element(areamul2vec2.begin(), areamul2vec2.end());
        if (finalarea > maxarea) {
          maxarea = finalarea;
        }
      }
      areamul2vec1.clear();
      areamul2vec2.clear();
    }
  }
  maxarea1 = (maxarea * 1.0) / 2.0;
  printf("%lf\n", maxarea1);
  return 0;
}