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

public class CF340B {
    
    static int[][] pts;
    
    public static void main(String[] args) {
        
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        pts = new int[n][2];
        
        for (int k = 0; k < n; k++)
        {
            pts[k][0] = in.nextInt();
            pts[k][1] = in.nextInt();
        }
        
        double largest = 0;
        for (int p1 = 0; p1 < n; p1++)
            for (int p2 = p1 + 1; p2 < n; p2++)
            {
                double min = 0;
                double max = 0;
                for (int k = 0; k < n; k++)
                    if (k != p1 && k != p2) 
                    {
                        double A = (double)Math.abs(pts[p1][0]*pts[p2][1] + pts[p2][0]*pts[k][1] + pts[k][0]*pts[p1][1] - pts[p1][1]*pts[p2][0] - pts[p2][1]*pts[k][0] - pts[k][1]*pts[p1][0])/2;
                        double sA = side(pts[p1][0], pts[p1][1], pts[p2][0], pts[p2][1], k) * A;
                        if (sA < min)
                            min = sA;
                        else if (sA > max)
                            max = sA;
                    }
                
                if (max - min > largest && max != 0 && min != 0)
                    largest = max - min;
            }
        
        System.out.println(largest);
    }
    
    public static int side(double ax, double ay, double bx, double by, int p) //what side of (ax,ay)-(bx,by) does point p lie on
    {
        double cp = (bx-ax)*(pts[p][1]-ay) - (by-ay)*(pts[p][0]-ax);
        if (cp > 1e-6)
            return -1;
        if (cp < -1e-6)
            return 1;
        return 0;
    }
}