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 JAVA):

Solution:
import java.io.*;
import java.util.*;

public class A {

	static int INF = (int) 1e9;

	static class pair {
		int v, idx;

		pair() {
			v = -INF;
		}

		void swap(pair p) {
			int v2 = v, idx2 = idx;
			v = p.v;
			idx = p.idx;
			p.v = v2;
			p.idx = idx2;
		}
	}

	static Point[] pts;

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner();
		PrintWriter out = new PrintWriter(System.out);
		int n = sc.nextInt();
		pts = new Point[n];
		for (int i = 0; i < n; i++)
			pts[i] = new Point(sc.nextInt(), sc.nextInt());
		int[][][] max = new int[n][n][2];
		for (int c = 0; c < n; c++)
			for (int a = 0; a < n; a++) {
				if (a == c)
					continue;
				pair best1 = new pair(), best2 = new pair();

				for (int d = 0; d < n; d++) {
					if (d == c || d == a)
						continue;
					int value = cross(c, d) + cross(d, a);
					if (value > best2.v) {
						best2.v = value;
						best2.idx = d;
						if (best2.v > best1.v) {
							best1.swap(best2);
						}
					}
				}
				max[a][c][0] = best1.idx;
				max[a][c][1] = best2.idx;

			}
		int ans = -INF;
		for (int a = 0; a < n; a++)
			for (int b = 0; b < n; b++)
				for (int c = 0; c < n; c++) {
					if (a == b || b == c || a == c)
						continue;
					// d such that c cross d + d cross a is max
					int d = max[a][c][0] == b ? max[a][c][1] : max[a][c][0];
					ans = Math.max(ans,
							pts[a].cross(pts[b]) + pts[b].cross(pts[c]) + pts[c].cross(pts[d]) + pts[d].cross(pts[a]));

				}
		out.println(Math.abs(ans) / 2.0);
		out.close();

	}

	static class Point {
		int x, y;

		Point(int a, int b) {
			x = a;
			y = b;
		}

		int cross(Point p) {
			return x * p.y - y * p.x;
		}
	}

	static int cross(int i, int j) {
		return pts[i].cross(pts[j]);
	}

	static class Scanner {
		BufferedReader br;
		StringTokenizer st;

		Scanner() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		Scanner(String fileName) throws FileNotFoundException {
			br = new BufferedReader(new FileReader(fileName));
		}

		String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		String nextLine() throws IOException {
			return br.readLine();
		}

		int nextInt() throws IOException {
			return Integer.parseInt(next());
		}

		long nextLong() throws NumberFormatException, IOException {
			return Long.parseLong(next());
		}

		double nextDouble() throws NumberFormatException, IOException {
			return Double.parseDouble(next());
		}

		boolean ready() throws IOException {
			return br.ready();
		}

	}

	static void sort(int[] a) {
		shuffle(a);
		Arrays.sort(a);
	}

	static void shuffle(int[] a) {
		int n = a.length;
		Random rand = new Random();
		for (int i = 0; i < n; i++) {
			int tmpIdx = rand.nextInt(n);
			int tmp = a[i];
			a[i] = a[tmpIdx];
			a[tmpIdx] = tmp;
		}
	}

}