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 int q = 239017;
const int mod = 1e9 + 7;
const int mod2 = 1e9 + 13;
const int MAXN = 2e5 + 100;
const int MAXM = 700;
const int L = 26;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
pair<int, int> tyan[3];
double ms[2][2];
void update(int id, double s) {
  ms[id][0] = max(ms[id][0], s);
  ms[id][1] = min(ms[id][1], s);
}
double get(int i, int j) {
  double f = abs(tyan[i].first - tyan[j].first);
  double s = abs(tyan[i].second - tyan[j].second);
  return sqrt(f * f + s * s);
}
double get() {
  double a = get(0, 1);
  double b = get(1, 2);
  double c = get(2, 0);
  double p = (a + b + c) / 2;
  return sqrt(p * (p - a) * (p - b) * (p - c));
}
int bad(pair<int, int> p, int f = 0, int s = 1) {
  bool fl = 1;
  pair<int, int> a = {p.first - tyan[f].first, p.second - tyan[f].second};
  pair<int, int> b = {p.first - tyan[s].first, p.second - tyan[s].second};
  int vc = a.first * b.second - a.second * b.first;
  return vc > 0;
}
void $main() {
  int n;
  cin >> n;
  vector<pair<int, int> > v(n);
  for (int i = 0; i < n; ++i) cin >> v[i].first >> v[i].second;
  double ans = 0;
  for (int i = 0; i < n; ++i) {
    tyan[0] = v[i];
    for (int j = i + 1; j < n; ++j) {
      tyan[1] = v[j];
      ms[0][1] = ms[1][1] = (int)1e18;
      ms[0][0] = ms[1][0] = -(int)1e18;
      for (int k = 0; k < n; ++k) {
        if (k == i || k == j) continue;
        tyan[2] = v[k];
        update(bad(v[k]), get());
      }
      ans = max(ans, ms[1][0] - ms[1][1]);
      ans = max(ans, ms[0][0] - ms[0][1]);
      ans = max(ans, ms[0][0] + ms[1][0]);
    }
  }
  cout << fixed << setprecision(10) << ans;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0), cout.tie(0);
  $main();
  return 0;
}