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 java.lang.*;
import java.math.*;
public class B {
    public static void main(String[] args) throws Exception {
        
        // 
        // Scanner scan = new Scanner(System.in);
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out)); 
        
        //
        // int n = scan.nextInt();
        
        // out.close(); System.exit(0);
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
         int n = Integer.parseInt(bf.readLine()); int[][] a = new int[n][2];
         for(int i=0; i<n; i++) {
             StringTokenizer st = new StringTokenizer(bf.readLine());
             a[i][0] = Integer.parseInt(st.nextToken());
             a[i][1] = Integer.parseInt(st.nextToken());
         }
         double onemax = 0; double twomax = 0; double max = 0;
         for(int i=0; i<n; i++) {
             for(int j=0; j<i; j++) {
                     onemax = 0; twomax = 0; boolean flag1 = false; boolean flag2 = false;
                     double slope = (a[j][1] - a[i][1] + 0.0)/(a[j][0] - a[i][0] + 0.0);
                     for(int k=0; k<n; k++) {
                         if(k == i || k == j)
                             continue;
                         if(a[k][1] > a[j][1] + slope*(a[k][0] - a[j][0])) {
                             flag1 = true;
                             double area = shoelace(a[i][0], a[i][1], a[j][0], a[j][1], a[k][0], a[k][1]);
                             if(area > onemax) {
                                 onemax = area;
                                 // System.out.println(i + " " + j + " " + k + " " + onemax + " " + twomax + " " + max);
                             }
                         }
                         if(a[k][1] < a[j][1] + slope*(a[k][0] - a[j][0])) {
                             flag2 = true;
                             double area = shoelace(a[i][0], a[i][1], a[j][0], a[j][1], a[k][0], a[k][1]);
                             if(area > twomax) {
                                 twomax = area;
                                 // System.out.println(i + " " + j + " " + k + " " + onemax + " " + twomax + " " + max);
                             }
                         }
                         
                     }
                     if(max < onemax + twomax && flag1 && flag2)
                         max = onemax + twomax;
                 }
                
             
         }
         out.println(max);
         out.close();
    }
    public static double shoelace(double a, double b, double c, double d, double e, double f) {
        return 0.5*Math.abs(a*d + c*f + e*b - b*c - d*e - f*a);
    }
}