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>
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
using namespace std;
long long bpow(long long a, long long b, long long m) {
  a %= m;
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = res * a % m;
    a = a * a % m;
    b >>= 1;
  }
  return res;
}
long long int extend_gcd(long long int a, long long int b, long long int &first,
                         long long int &second) {
  if (b == 0) {
    first = 1;
    second = 0;
    return a;
  }
  long long int x1, y1;
  long long int ans = extend_gcd(b, a % b, x1, y1);
  first = y1;
  second = x1 - (a / b) * y1;
  return ans;
}
long long int inverse(long long int a, long long int m) {
  long long int first, second;
  extend_gcd(m, a, first, second);
  second %= m;
  second += m;
  second %= m;
  return second;
}
long long int kv;
long long int t, n, first, second, h, k, z, p, q, w;
pair<long long int, long long int> a[100000];
void up(pair<long long int, long long int> a,
        pair<long long int, long long int> b,
        pair<long long int, long long int> c, long double &f, long double &g) {
  if ((a.first - c.first) * (b.second - c.second) -
          (a.second - c.second) * (b.first - c.first) >
      0) {
    long double gg =
        0.5 * abs(a.first * b.second - b.first * a.second + b.first * c.second -
                  b.second * c.first + c.first * a.second - c.second * a.first);
    if (gg > f) f = gg;
  }
  if ((a.first - c.first) * (b.second - c.second) -
          (a.second - c.second) * (b.first - c.first) <
      0) {
    long double gg =
        0.5 * abs(a.first * b.second - b.first * a.second + b.first * c.second -
                  b.second * c.first + c.first * a.second - c.second * a.first);
    if (gg > g) g = gg;
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (long long i = 0; i < int(n); i++) cin >> a[i].first >> a[i].second;
  long double ans = 0;
  for (long long i = 0; i < int(n); i++) {
    for (int j = i + 1; j < n; j++) {
      long double u = -1, v = -1;
      for (long long k = 0; k < int(n); k++) up(a[i], a[j], a[k], u, v);
      if (u > 0 && v > 0 && (u + v) > ans) ans = u + v;
    }
  }
  cout << fixed << setprecision(16) << ans;
  return 0;
}