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


public class Main implements Runnable {
		
	public void solve() throws IOException {
                //assume ABCD is the quadrilateral
                /*      A       B
                        |-------|
                        |       |
                        |       |
                        |-------|
                        C       D
                
                take two  points, A and D and assume it to be diagonal AD {you may assume it to be any diagonal}
                
                now on taking cross product of AD with some ther Point X will give you either +ve or -ve value
                find MAX(ABS(-ve)), it mean you got area of triangle ABC ..........(1) big trianle in the LEFT side of diagonal
                find MAX(+ve), it means you got area of triangle ADB...............(2) big triangle is the RIGHT side of diagonal
                (1) + (2) is the area of max quardrilateral
                */
                
                
                int N = nextInt();
                Point[] p = new Point[N];
                for(int i = 0; i < N; i++){
                        p[i] = new Point(nextInt(), nextInt());
                }
                
                double best = 0;
                for(int i = 0; i < N; i++){
                        for(int j = i+1; j < N; j++){
                                
                                double l = 0; double r = 0;
                                for(int k = 0; k < N; k++){
                                        double area = cross( p[j].subtract(p[i]) , p[k].subtract(p[i]));
                                        area /= 2.0;
                                        l = Math.max(l, -area);
                                        r = Math.max(r, area);
                                }
                                if(l > 0 && r > 0){
                                        best = Math.max(best, l + r);
                                }
                        }
                }
                
                out.println(best);
	}
        
        private int cross(Point a, Point b){
                return a.x * b.y - b.x * a.y;
        }

       static class Point{
               int x, y;
               Point(int x, int y){
                       this.x = x;
                       this.y = y;
               }
               
               public Point subtract(Point b){
                       return new Point(x - b.x, y - b.y);
               }
       }
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	//-----------------------------------------------------------
	public static void main(String[] args) {
		new Main().run();
	}

        public void debug(Object... arr){
            System.out.println(Arrays.deepToString(arr));
        }

        public void print1Int(int[] a){
                for(int i = 0; i < a.length; i++)
                        System.out.print(a[i] + " ");
                System.out.println();
        }
        
        public void print2Int(int[][] a){
                for(int i = 0; i < a.length; i++){
                        for(int j = 0; j < a[0].length; j++){
                                System.out.print(a[i][j] + " ");
                        }
                        System.out.println();
                }
        }
        
	public void run() {
		try {
			in = new BufferedReader(new InputStreamReader(System.in));
                        out = new PrintWriter(System.out);
			tok = null;
			solve();
			in.close();
                        out.close();
		} catch (IOException e) {
			System.exit(0);
		}
	}

	public String nextToken() throws IOException {
		while (tok == null || !tok.hasMoreTokens()) {
			tok = new StringTokenizer(in.readLine());
		}
		return tok.nextToken();
	}

	public int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}

	public long nextLong() throws IOException {
		return Long.parseLong(nextToken());
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(nextToken());
	}
        PrintWriter out;
	BufferedReader in;
	StringTokenizer tok;
}