Problem:
Score : 600 points

Problem Statement

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}.

Sample Input 1

2
0 0
1 0

Sample Output 1

0.500000000000000000

Both points are contained in the circle centered at (0.5,0) with a radius of 0.5.

Sample Input 2

3
0 0
0 1
1 0

Sample Output 2

0.707106781186497524

Sample Input 3

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

Sample Output 3

6.726812023536805158

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

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Wrong Answer)

import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());
		double[] x = new double[N];
		double[] y = new double[N];
		for (int i=0;i<N;i++) {
			x[i] = Integer.parseInt(sc.next());
			y[i] = Integer.parseInt(sc.next());
		}
		double ans = 19191919;
		if (N==2) ans = Math.sqrt((x[0]-x[1])*(x[0]-x[1])+(y[0]-y[1])*(y[0]-y[1]))/2;
		for (int i=0;i<N;i++) {
			for (int j=i+1;j<N;j++) {
				for (int k=j+1;k<N;k++) {
					double tmp = 0;
					double x1 = x[i];
					double x2 = x[j];
					double x3 = x[k];
					double y1 = y[i];
					double y2 = y[j];
					double y3 = y[k];

					// double x0 = (-(x2-x1)*(x1+x2)*(y3-y2)+(x3-x2)*(x2+x1)*(y2-y3)+(y2-y1)*(y3-y2)*(y3-y1))/(-(x2-x1)*(y3-y2)+(x3-x2)*(y2-y1))/2;
					// double y0 = -(x2-x1)/(y2-y1)*(x0-(x1+x2)/2)+(y1+y2)/2;
					// y0=100;
					double A = x2 - x1;
		            double B = y2 - y1;
		            double p = (y2 * y2 - y1 * y1 + x2 * x2 - x1 * x1) / 2;
		            double C = x3 - x1;
		            double D = y3 - y1;
		            double q = (y3 * y3 - y1 * y1 + x3 * x3 - x1 * x1) / 2;

		            double x0 = (D * p - B * q) / (A * D - B * C);
		            double y0 = (A * q - C * p) / (A * D - B * C);
					System.out.println("x0, y0: "+x0+" "+y0);
					System.out.println("H"+(-(x2-x1)*(x1+x2)*(y3-y2)+(x3-x2)*(x2+x1)*(y2-y3)+(y2-y1)*(y3-y2)*(y3-y1)));
					for (int l=0;l<N;l++) {
						double r = Math.sqrt((x[l]-x0)*(x[l]-x0)+(y[l]-y0)*(y[l]-y0));
						tmp = Math.max(tmp, r);
					}
					ans = Math.min(ans, tmp);
				}
			}
		}
		System.out.println(ans);
	}
}