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 CPP):

Solution:
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
	double x,y;
}a[55];
int n,i,j,k,x;
double ans=1e50,w,A1,B1,C1,A2,B2,C2;
node operator -(node a,node b)
{
	return (node){a.x-b.x,a.y-b.y};
}
double dis(node a,node b)
{
	return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double mult(node a,node b)
{
	return a.x*b.y-a.y*b.x;
}
int main()
{
	scanf("%d",&n);
	for(i=1;i<=n;++i)
		scanf("%lf%lf",&a[i].x,&a[i].y);
	for(i=1;i<=n;++i)
		for(j=i+1;j<=n;++j)
			for(k=j+1;k<=n;++k)
			{
				if(mult(a[j]-a[i],a[k]-a[i])==0.0)
					continue;
				A1=2*(a[j].x-a[i].x),B1=2*(a[j].y-a[i].y),C1=a[i].x*a[i].x+a[i].y*a[i].y-a[j].x*a[j].x-a[j].y*a[j].y;
				A2=2*(a[k].x-a[i].x),B2=2*(a[k].y-a[i].y),C2=a[i].x*a[i].x+a[i].y*a[i].y-a[k].x*a[k].x-a[k].y*a[k].y;
				a[0]=(node){(C2*B1-C1*B2)/(A1*B2-A2*B1),(C2*A1-C1*A2)/(B1*A2-B2*A1)};
				w=0;
				for(x=1;x<=n;++x)
					w=max(w,dis(a[0],a[x]));
				ans=min(ans,w);
			}
	for(i=1;i<=n;++i)
		for(j=i+1;j<=n;++j)
		{
			a[0]=(node){(a[i].x+a[j].x)/2,(a[i].y+a[j].y)/2};
			w=0;
			for(k=1;k<=n;++k)
				w=max(w,dis(a[0],a[k]));
			ans=min(ans,w);
		}
	printf("%.12lf",ans);
	return 0;
}