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:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Assassin
 */
import java.io.*;
import java.util.*;

public class B {

    private static BufferedReader reader;
    private static PrintWriter out;
    private static StringTokenizer tokenizer;
    //private final static String filename = "filename";

    private static void init(InputStream input, OutputStream output) throws IOException {
        reader = new BufferedReader(new InputStreamReader(input));
        out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(output)));
        //reader = new BufferedReader(new FileReader(filename + ".in"));
        //out = new PrintWriter(new BufferedWriter(new FileWriter(filename + ".out")));
        tokenizer = new StringTokenizer("");
    }

    private static String nextLine() throws IOException {
        return reader.readLine();
    }

    private static String next() throws IOException {
        while (!tokenizer.hasMoreTokens())
            tokenizer = new StringTokenizer(nextLine());
        return tokenizer.nextToken();
    }

    private static int nextInt() throws IOException {
        return Integer.parseInt(next());
    }

    private static long nextLong() throws IOException {
        return Long.parseLong(next());
    }

    private static double nextDouble() throws IOException {
        return Double.parseDouble(next());
    }

    private static double ccw(double[] x, double[] y, int a, int b, int c) {
        return ((x[b] - x[a]) * (y[c] - y[b]) - (y[b] - y[a]) * (x[c] - x[b])) * 0.5;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        init(System.in, System.out);
        //long startTime = System.currentTimeMillis();
        int n = nextInt();
        double maxArea = 0;
        double eps = 0.0000000001;
        double[] x = new double[n];
        double[] y = new double[n];
        for (int i = 0; i < n; i++) {
            x[i] = nextDouble();
            y[i] = nextDouble();

        }
        for (int i = 0; i < n; i++)
            for (int j = i + 1; j < n; j++) {
                double maxMinus = -1, maxPlus = -1;
                for (int k = 0; k < n; k++)
                    if (k != i && k != j) {
                        double temp = ccw(x, y, i, j, k);
                        if (temp < 0 && -temp - maxMinus > eps)
                            maxMinus = -temp;
                        else if (temp >= 0 && temp - maxPlus > eps)
                            maxPlus = temp;
                    }
                if (maxPlus >= 0 && maxMinus >= 0 && maxMinus + maxPlus - maxArea > eps)
                    maxArea = maxMinus + maxPlus;
            }
        out.println(maxArea);
        //long runTime = System.currentTimeMillis() - startTime;
        //out.write(runTime + "\n");
        out.close();
        reader.close();
        System.exit(0);
    }
}