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<bits/stdc++.h>
using namespace std;
const int N=1e5+50;
const double eps=1e-8,dt=0.998;
struct node{int x,y;}a[N];
int n,num=0;double now,ans=1e9;
double dis(double x,double y,int id){
    double xx=x-a[id].x,yy=y-a[id].y;
    return sqrt(xx*xx+yy*yy);
}
void SA(){
    double t=1926,x=rand()%1000,y=rand()%1000;now=0;
    for(int i=1;i<=n;i++)now=max(now,dis(x,y,i));
    while(t>eps){
        int op1=rand()&1,op2=rand()&1;double dx=rand()%1000*t,dy=rand()%1000*t;
        double xx=x+(op1?dx:-dx),yy=y+(op2?dy:-dy),dat=0;
        for(int i=1;i<=n;i++)dat=max(dat,dis(xx,yy,i));
        if(dat<now||rand()<exp((now-dat)/t)*RAND_MAX)now=dat,x=xx,y=yy;
        t*=dt;
    }
}
int main(){
    scanf("%d",&n);srand(time(0));
    for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);
    for(int i=1;i<=30;i++)SA(),ans=min(ans,now);
    printf("%.8f\n",ans);
}