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.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.TreeMap;

public class B {
	private static BufferedReader in;
	private static StringTokenizer st;
	private static PrintWriter out;

	public static void main(String[] args) throws NumberFormatException,
			IOException {
		in = new BufferedReader(new InputStreamReader(System.in));
		st = new StringTokenizer("");
		out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
				System.out)));
		int n = nextInt();
		int x[]=new int[n+1];
		int y[]=new int[n+1];
		for (int i = 1; i <=n; i++) {
			x[i]=nextInt();
			y[i]=nextInt();
		}
		double ans=0;
		for (int i = 1; i <=n; i++) {
			for (int j = 1; j <=n; j++) {
				int max=0;int min=0;
				for (int k = 1; k <=n; k++) {
					if(k==i || k==j)
						continue;
						int s=yuza(x[i],y[i],x[j],y[j],x[k],y[k]);
						if(s>0)
							max=Math.max(max, s);
						else
							min=Math.min(min, s);
					
				}
				if(max>0 && min<0)
					ans=Math.max(ans, (max-min)/2.0);
			}
		}
		System.out.println(ans);
		
	}

	private static int yuza(int x1, int y1, int x2, int y2, int x3, int y3) {
		return ((x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2)));
	}

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

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

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

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

}