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 C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <vector>
#include <climits>
#include <iomanip>
#include <cmath>
using namespace std;
using uint = unsigned int;

int main() {
	
	uint N;
	cin >> N;
	
	vector<int> X(N);
	vector<int> Y(N);
	
	double lx = 1000;
	double hx = 0;
	double ly = 1000;
	double hy = 0;
	
	for(uint i=0; i<N; i++) {
		cin >> X[i] >> Y[i];
		lx = min(lx, (double)X[i]);
		hx = max(hx, (double)X[i]);
		ly = min(ly, (double)Y[i]);
		hy = max(hy, (double)Y[i]);
	}
	
	double thr = pow(10, -12);
	
	while(hx - lx > thr || hy - ly > thr) {
		// X
		double mh = (lx + hx * 2) / 3;
		double ml = (lx * 2 + hx) / 3;
		double my = (ly + hy) / 2;
		
		double mha = 0; 
		double mla = 0; 
			
		for(uint i=0; i<N; i++) {
			mha = max(mha, pow(X[i] - mh, 2) + pow(Y[i] - my, 2));
			mla = max(mla, pow(X[i] - ml, 2) + pow(Y[i] - my, 2)); 
		}
		
		hx = (mha > mla) ? mh : hx;
		lx = (mha > mla) ? lx : ml;

		// Y
		mh = (ly + hy * 2) / 3;
		ml = (ly * 2 + hy) / 3;
		double mx = (lx + hx) / 2;
		
		mha = 0; 
		mla = 0; 
			
		for(uint i=0; i<N; i++) {
			mha = max(mha, pow(X[i] - mx, 2) + pow(Y[i] - mh, 2));
			mla = max(mla, pow(X[i] - mx, 2) + pow(Y[i] - ml, 2)); 
		}
		
		hy = (mha > mla) ? mh : hy;
		ly = (mha > mla) ? ly : ml;
			
		//cout << lx << " " << hx << " " << ly << " " << hy << endl; 
	}
	
	double ansX = (hx + lx) / 2;
	double ansY = (hy + ly) / 2;
	double ans = 0;
	
	for(uint i=0; i<N; i++) {
		ans = max(ans, pow(X[i] - ansX, 2) + pow(Y[i] - ansY, 2));
	}

	cout << setprecision(10) << sqrt(ans);
	return 0;
}