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)

#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include "bits/stdc++.h"
//#include <intrin.h>

#define fore(i,a,b) for(int i = a; i < (b); i++)
#define fr(i,a,b) for(int i = a - 1; i >= b; i--)
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define N 300005
#define inf 2000000000
#define EPS 1e-7
#define MOD (ll)1e15
#define __builtin_popcount(x) __popcnt(x)

using namespace std;

typedef long long ll;
typedef pair<double, double> pr;
typedef pair<pair<int, int>, int> tup;

double find_r(double x, double y, vector<pr> &p)
{
	double l = 0, r = 1000;
	while (abs(r - l) > EPS) {
		double m = (l + r) / 2;

		bool ok = 1;
		fore(i, 0, p.size())
		{
			double j = (x - p[i].first) * (x - p[i].first) + (y - p[i].second) * (y - p[i].second) - m * m > 0;
			if (abs(j) > EPS && j < 0)
				ok = 0;
		}

		if (ok)
			r = m;
		else
			l = m;
	}

	return r;
}

double find_x(double y, vector<pr> &p)
{
	double l = 0, r = 1000;
	while (r - l > EPS) {
		double m1 = l + (r - l) / 3,
			m2 = r - (r - l) / 3;
		if (find_r(m1, y, p) > find_r(m2, y, p))
			l = m1;
		else
			r = m2;
	}
	return r;
}

inline void solve()
{
	int n;
	cin >> n;
	vector<pr> v(n);
	fore(i, 0, n)
		cin >> v[i].first >> v[i].second;

	double mn = 1e18;
	double y = 0;
	double l = 0, r = 1000;

	for (double x = l; x <= r; x += 0.2)
	{
		double rr = find_r(find_x(x, v), x, v);
		if (rr < mn)
		{
			mn = rr;
			y = x;
		}
	}
	for (double x = y - 0.1; x <= y + 0.1; x += 0.002)
	{
		double rr = find_r(find_x(x, v), x, v);
		if (rr < mn)
		{
			mn = rr;
			y = x;
		}
	}
	for (double x = y - 0.001; x <= y + 0.001; x += 0.0002)
	{
		double rr = find_r(find_x(x, v), x, v);
		if (rr < mn)
		{
			mn = rr;
			y = x;
		}
	}
	for (double x = y - 0.0001; x <= y + 0.0001; x += 0.00002)
	{
		double rr = find_r(find_x(x, v), x, v);
		if (rr < mn)
		{
			mn = rr;
			y = x;
		}
	}
	for (double x = y - 0.00001; x <= y + 0.00001; x += 0.000002)
	{
		double rr = find_r(find_x(x, v), x, v);
		if (rr < mn)
		{
			mn = rr;
			y = x;
		}
	}
	for (double x = y - 0.000001; x <= y + 0.000001; x += 0.0000002)
	{
		double rr = find_r(find_x(x, v), x, v);
		if (rr < mn)
		{
			mn = rr;
			y = x;
		}
	}
	for (double x = y - 0.0000001; x <= y + 0.0000001; x += 0.00000002)
	{
		double rr = find_r(find_x(x, v), x, v);
		if (rr < mn)
		{
			mn = rr;
			y = x;
		}
	}

	cout << fixed << setprecision(10) << mn;
}

int main()
{
	fast;
#if defined(_DEBUG)
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
	solve();
}