import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.Locale;

public class polygon_pm {
    private static final double EPS = 1e-14;

    public static void main(String[] args) throws FileNotFoundException {

        Locale.setDefault(Locale.US);
        Scanner scanner = new Scanner(new File("polygon.in"));

        int n = scanner.nextInt();

        double x[] = new double[n];
        double y[] = new double[n];

        for (int i = 0; i < n; i++) {
            x[i] = scanner.nextDouble();
            y[i] = scanner.nextDouble();
        }

        double aa = 0;
        for (int i = 0; i < n; i++) {
            double a = Math.atan2(y[i], x[i]);
            boolean good = true;
            for (int j = 0; j < n; j++) if (j != i) {
                double yy = y[j] * Math.cos(a) - x[j] * Math.sin(a);
                if (yy < 0) good = false;
            }
            if (good) {
                aa = a;
                for (int j = 0; j < n; j++) {
                    double xx = x[j] * Math.cos(a) + y[j] * Math.sin(a);
                    double yy = y[j] * Math.cos(a) - x[j] * Math.sin(a);
                    x[j] = xx;
                    y[j] = yy;
                }
                break;
            }
        }

        double[] a = new double[n];
        for (int i = 0; i < n; i++) {
            a[i] = Math.atan2(y[i], x[i]);
        }

        double mind = 1e100;
        double mina = 0;

        for (int i = 0; i < n; i++) {
            int ii = (i + 1) % n;
            double a1 = y[ii] - y[i];
            double b1 = x[i] - x[ii];
            double c1 = - (a1 * x[ii] + b1 * y[ii]);
            for (int j = 0; j < n; j++) {
                int jj = (j + 1) % n;
                double a2 = y[jj] - y[j];
                double b2 = x[j] - x[jj];
                double c2 = - (a2 * x[jj] + b2 * y[jj]);
                if (a[i] < a[ii] && a[j] > a[jj]) {
                    double l = Math.max(a[i], a[jj]);
                    double r = Math.min(a[ii], a[j]);
                    if (r > l + EPS) {
                        while (r > l + EPS) {
                            double m1 = (2 * l + r) / 3;
                            double m2 = (l + 2 * r) / 3;
                            double h1 = f(a1, b1, c1, a2, b2, c2, m1);
                            double h2 = f(a1, b1, c1, a2, b2, c2, m2);
                            if (h1 < h2) {
                                r = m2;
                            } else {
                                l = m1;
                            }
                        }
                        double d = f(a1, b1, c1, a2, b2, c2, l);
                        if (d < mind) {
                            mind = d;
                            mina = l;
                        }
                    }
                }
            }
        }

        PrintWriter writer = new PrintWriter(new File("polygon.out"));
        writer.println(mind);
//        writer.println(Math.tan(mina + aa));
        writer.close();

    }

    private static double f(double a1, double b1, double c1, double a2, double b2, double c2, double a) {
        double a3 = Math.sin(a);
        double b3 = -Math.cos(a);
        double c3 = 0;
        return getD(a1, b1, c1, a3, b3, c3) * getD(a2, b2, c2, a3, b3, c3);
    }

    private static double getD(double a1, double b1, double c1, double a2, double b2, double c2) {
        double d = a1 * b2 - a2 * b1;
        double dx = b1 * c2 - b2 * c1;
        double dy = c1 * a2 - c2 * a1;
        return Math.hypot(dx/d, dy/d);
    }
}
