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.StringTokenizer;

public class B {
    
    static StringTokenizer st;
    static BufferedReader in;
    static PrintWriter pw;
    
    public static void main(String[] args) throws IOException {
        in = new BufferedReader(new InputStreamReader(System.in));
        pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
        int n = nextInt();
        int[]x = new int[n+1], 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 = i+1; j <= n; j++) {
                int max = 0, min = 0;
                for (int j2 = 1; j2 <= n; j2++) {
                    if (j2==i || j2==j)
                        continue;
                    int s = surfase(x[i], y[i], x[j2], y[j2], x[j], y[j]);
                    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);
        pw.close();
    }
    private static int surfase(int x1, int y1, int x2, int y2, int x3, int y3) {
        return x1*y2+x2*y3+x3*y1-x3*y2-x1*y3-x2*y1;
    }
    private static int nextInt() throws IOException{
        return Integer.parseInt(next());
    }
    
    private static long nextLong() throws IOException{
        return Long.parseLong(next());
    }
    
    private static double nextDouble() throws IOException{
        return Double.parseDouble(next());
    }
    
    private static String next() throws IOException {
        while (st == null || !st.hasMoreTokens()) {
            st = new StringTokenizer(in.readLine());
        }
        return st.nextToken();
    }
}