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.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;


public class Bdiv2 {
    
    static class Scanner{
        BufferedReader br=null;
        StringTokenizer tk=null;
        public Scanner(){
            br=new BufferedReader(new InputStreamReader(System.in));
        }
        public String next() throws IOException{
            while(tk==null || !tk.hasMoreTokens())
                tk=new StringTokenizer(br.readLine());
            return tk.nextToken();
        }
        public int nextInt() throws NumberFormatException, IOException{
            return Integer.valueOf(next());
        }
        public double nextDouble() throws NumberFormatException, IOException{
            return Double.valueOf(next());
        }
    }
    
    static class Point{
        int x,y;
        public Point(int xx, int yy){
            x = xx;
            y = yy;
        }
        Point sub(Point o){
            return new Point(x - o.x, y - o.y);
        }
        int cross(Point o){
            return x * o.y - y * o.x;
        }
    }
    
    static int N;
    static Point[] array;
    
    static int compute(Point base, Point o){
        if (o == null)
            return 0;
        return Math.abs(base.cross(o));
    }
    
    public static void main(String args[]) throws NumberFormatException, IOException{
        Scanner sc = new Scanner();
        N = sc.nextInt();
        array = new Point[N];
        for(int i = 0; i < N; i++)
            array[i] = new Point(sc.nextInt(), sc.nextInt());
        int max = 0;
        for(int i = 0; i < N; i++){
            for(int j = i + 1; j < N; j++){
                Point v = array[j].sub(array[i]);
                Point p= array[i];
                Point izq = null,der = null;
                for(int k = 0; k < N; k++){
                    if (i == k || j == k)
                        continue;
                    Point res = array[k].sub(p); 
                    if (res.cross(v) < 0){
                        if (compute(v, res) > compute(v, izq))
                            izq = res;
                    }
                    else{
                        if (compute(v, res) > compute(v, der))
                            der = res;
                    }
                }
                if (izq != null && der != null)
                    max = Math.max(max, compute(v, izq) + compute(v, der));
            }
        }
        System.out.println(max / 2.0);  
    }

}