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;
signed main() {
  std::ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  ;
  long long CASE = 1;
  while (CASE--) {
    long long n;
    cin >> n;
    vector<std::pair<long long, long long> > c;
    for (long long i = 0; i < n; ++i) {
      long long x, y;
      cin >> x >> y;
      c.push_back({x, y});
    }
    double ans = 0;
    for (long long i = 0; i < n; ++i) {
      for (long long j = i + 1; j < n; ++j) {
        double mx = INT_MIN, mn = INT_MAX;
        for (long long k = 0; k < n; ++k) {
          if (i == k || j == k) continue;
          double area = (c[k].first * (c[i].second - c[j].second) +
                         c[i].first * (c[j].second - c[k].second) +
                         c[j].first * (c[k].second - c[i].second)) *
                        0.5;
          mx = max(mx, area);
          mn = min(mn, area);
        }
        ans = max(ans, mx - mn);
      }
    }
    cout << setprecision(10) << ans << '\n';
  }
  return 0;
}