Problem: Given are N points (x_i, y_i) in a two-dimensional plane.

Find the minimum radius of a circle such that all the points are inside or on it.

Constraints

* 2 \leq N \leq 50
* 0 \leq x_i \leq 1000
* 0 \leq y_i \leq 1000
* The given N points are all different.
* The values in input are all integers.

Input

Input is given from Standard Input in the following format:


N
x_1 y_1
:
x_N y_N


Output

Print the minimum radius of a circle such that all the N points are inside or on it.

Your output will be considered correct if the absolute or relative error from our answer is at most 10^{-6}.

Examples

Input

2
0 0
1 0


Output

0.500000000000000000


Input

3
0 0
0 1
1 0


Output

0.707106781186497524


Input

10
10 9
5 9
2 0
0 0
2 7
3 3
2 5
10 0
3 7
1 9


Output

6.726812023536805158

Solution (in JAVA):

Solution:
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] sa = br.readLine().split(" ");
		int n = Integer.parseInt(sa[0]);
		int[] x = new int[n];
		int[] y = new int[n];
		for (int i = 0; i < n; i++) {
			sa = br.readLine().split(" ");
			x[i] = Integer.parseInt(sa[0]);
			y[i] = Integer.parseInt(sa[1]);
		}
		br.close();

		System.out.println(calc(x, y));
	}

	static double calc(int[] x, int[] y) {
		double gosa = 1e-7;
		double l = 0;
		double r = 1000;
		double ret = 2000;
		while (r - l > gosa) {
			double m1 = (l * 2 + r) / 3;
			double m2 = (l + r * 2) / 3;
			double v1 = getMaxR(x, y, m1, getY(x, y, m1));
			double v2 = getMaxR(x, y, m2, getY(x, y, m2));
			if (v1 <= v2) {
				r = m2;
				ret = v1;
			} else {
				l = m1;
				ret = v2;
			}
		}
		return ret;
	}

	static double getY(int[] x, int[] y, double mx) {
		double gosa = 1e-7;
		double l = 0;
		double r = 1000;
		while (r - l > gosa) {
			double m1 = (l * 2 + r) / 3;
			double m2 = (l + r * 2) / 3;
			double v1 = getMaxR(x, y, mx, m1);
			double v2 = getMaxR(x, y, mx, m2);
			if (v1 <= v2) {
				r = m2;
			} else {
				l = m1;
			}
		}
		return r;
	}

	static double getMaxR(int[] x, int[] y, double mx, double my) {
		double max = 0;
		for (int i = 0; i < y.length; i++) {
			double d = Math.hypot(x[i] - mx, y[i] - my);
			max = Math.max(max, d);
		}
		return max;
	}
}