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.Arrays;
import java.util.StringTokenizer;

public class B {
    private static BufferedReader in;
    private static StringTokenizer st;
    private static PrintWriter out;
    private static Point[] p;
    
    static class Point implements Comparable<Point>{
        int x, y;
        double alfa;
        public int compareTo(Point o) {
            if(this.alfa - o.alfa > 1e-9)
                return 1;
            else
                return -1;
        }
        public Point(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
    public static void main(String[] args) throws IOException {
        in = new BufferedReader(new InputStreamReader(System.in));
        st = new StringTokenizer("");
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
        int n = nextInt();
        p = new Point[n];
        for (int i = 0; i < n; i++) {
            p[i] = new Point(nextInt(), nextInt());
        }
        double ans = 0.0;
        for (int i = 0; i < n-1; i++) {
            for (int j = i+1; j < n; j++) {
                double max = 0, min = 0;
                for (int k = 0; k < n; k++) {
                    if(k==i || k==j)
                        continue;
                    int s = yuza(p[i],p[j],p[k]);
                    if(s > 0){
                        max = Math.max(max, yuza(p[i], p[j], p[k]));
                    }else{
                        min = Math.min(min, yuza(p[i], p[j], p[k]));
                    }
                }
                if(max > 0 && min < 0){
                    ans = Math.max(ans, (max - min)/2.0);
                }
            }
        }
        System.out.println(ans);
    }
    private static int yuza(Point p1, Point p2, Point p3) {
        return p1.x * p2.y + p2.x *p3.y + p1.y * p3.x 
            -  (p2.y * p3.x + p2.x * p1.y + p3.y*p1.x);
    }
    
    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());
    }

}