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
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
const double eps = 1e-12;
struct Point {
	double x, y;
} a[N], O;
double R;
double sqr(double x) {
	return x * x;
}
double dis(Point a, Point b) {
	return sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));
}
void work(Point p1, Point p2, Point p3) {
	double a, b, c, d, e, f;
	a = p2.y - p1.y;
	b = p3.y - p1.y;
	c = p2.x - p1.x;
	d = p3.x - p1.x;
	f = p3.x * p3.x + p3.y * p3.y - p1.x * p1.x - p1.y * p1.y;
	e = p2.x * p2.x + p2.y * p2.y - p1.x * p1.x - p1.y * p1.y;
	O.x = (a * f - b * e) / (2 * a * d - 2 * b * c);
	O.y = (d * e - c * f) / (2 * a * d - 2 * b * c);
	R = dis(O, p1);
}
int main() {
	int n, i, j, k;
	scanf("%d", &n);
	for (i = 1; i <= n; ++i) scanf("%lf%lf", &a[i].x, &a[i].y);
	random_shuffle(a + 1, a + n + 1);
	O = a[1];
	R = 0;
	for (i = 2; i <= n; ++i)
		if (dis(a[i], O) > R + eps) {
			O = a[i];
			R = 0;
			for (j = 1; j < i; ++j)
				if (dis(a[j], O) > R + eps) {
					O.x = (a[i].x + a[j].x) / 2;
					O.y = (a[i].y + a[j].y) / 2;
					R = dis(a[j], O);
					for (k = 1; k < j; ++k) if (dis(a[k], O) > R + eps) work(a[i], a[j], a[k]);
				}
		}
	printf("%.10lf", R);
	return 0;
}