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.util.*;
import java.io.*;
import static java.lang.Math.*;
import static java.lang.Integer.parseInt;
import static java.lang.Double.parseDouble;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader in = new  BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tk;
        
        int n = parseInt(in.readLine());
        point [] p = new point[n];
        int i,j,k;
        
        for(i=0; i<n; i++) {
            tk = new StringTokenizer(in.readLine());
            p[i] = new point(parseDouble(tk.nextToken()), parseDouble(tk.nextToken()));
        }
        
        double ans = Double.MIN_VALUE,mxp,mxn,c;
        for(i=0; i<n; i++) {
            for(j=i+1; j<n; j++) {
                mxp = mxn = -1;
                for(k=0; k<n; k++) {
                    if(k==i || k==j) continue;
                    
                    c = ccw(p[i],p[j],p[k]);
                    if(c > 0)
                        mxp = max(mxp, c);
                    else mxn = max(mxn, -c);
                }
                
                if(mxp>=0 && mxn>=0) {
                    ans = max(ans, mxp+mxn);
                    
                }
            }
        }
        
        System.out.println(ans);
    }
    
    static double ccw(point a,point b,point c) {
        return 0.5*((b.x-a.x)*(c.y-b.y)-(b.y-a.y)*(c.x-b.x));
    }
}

class point {
    double x,y;
    
    public point(double x,double y) {
        this.x = x;
        this.y = y;
    }
}