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.*;
import java.util.*;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.text.DecimalFormat;
import java.lang.Math;
import java.util.Iterator; 
public class b97{
    public static int sign(int x1, int y1, int x2, int y2, int x3, int y3){
        return y3*(x2-x1)-x3*(y2-y1);
    }
    public static double area(int x1, int y1, int x2, int y2, int x3, int y3){
        return ((double)x1*(y2-y3)+(double)x2*(y3-y1)+(double)x3*(y1-y2))/2.0;
    }
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[][] a = new int[n][2];
		double d1 = -1;
		int x1 = 0;
		int y1 = 0;
		int x3 = 0;
		int y3 = 0;
		for(int i = 0; i < n; i++){
		    a[i][0] = sc.nextInt();
		    a[i][1] = sc.nextInt();
		}
		double mArea = 0.0;
		for(int i = 0; i < n; i++){
		    for(int j = i+1; j < n; j++){
		        double nMax = 0.0;
		        double pMax = 0.0;
		        for(int k = 0; k < n; k++){
		            if(k!=j && k!=i){
		                int temp = sign(a[i][0], a[i][1], a[j][0], a[j][1], a[k][0], a[k][1]);
		                if(temp>0){
		                    pMax = Math.max(pMax, area(a[i][0], a[i][1], a[j][0], a[j][1], a[k][0], a[k][1]));
		                }
		                else{
		                    nMax = Math.max(nMax, -1*area(a[i][0], a[i][1], a[j][0], a[j][1], a[k][0], a[k][1]));
		                }
		            }
		            if(nMax>0 && pMax>0){
		                mArea = Math.max(mArea, (pMax+nMax));
		            }
		        }
		    }
		}
		System.out.println(mArea);
	}	
}