#include <bits/stdc++.h>
using namespace std;
#define int long long
#define F(i,a,b) for(int i=(int)(a);i<=(int)(b);i++)
#define R(i,b,a) for(int i=(int)(b);i>=(int)(a);i--)
#define endl "\n"
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define pii pair<int,int>
#define pb push_back
#define all(v) v.begin(),v.end()
#define I first
#define S second

const int N=105;
int n,x[N],y[N],id[N],off=1e12;

int root(int x){
   while(x!=id[x]){
      id[x]=id[id[x]];
      x=id[x];
   }
   return x;
}
void uni(int x,int y){
   int p=root(x);
   int q=root(y);
   if(p==q) return;
   id[q]=id[p];
}

bool slv(int x1,int y1,int x2,int y2,int r){
   int dis=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
   dis*=off;
   return (dis<4*r*r);
}

bool chk(int r){
   F(i,1,n+2) id[i]=i;

   F(i,1,n){
      F(j,i+1,n){
         if(slv(x[i],y[i],x[j],y[j],r)) uni(i,j);
      }
   }
   F(i,1,n){
      int d1=abs(100-y[i])*(1e6);
      int d2=abs(y[i]+100)*(1e6);

      if(d1<2*r) uni(n+1,i);
      if(d2<2*r) uni(n+2,i);
   }

   return (root(n+1)!=root(n+2));
}

int32_t main(){
   ios;
   cin>>n;

   F(i,1,n) cin>>x[i]>>y[i];

   int l=0,r=1e8,mid;
   while(l<=r){
      mid=l+r>>1;
      if(chk(mid)) l=mid+1;
      else r=mid-1;
   }
   l--;

   cout<<setprecision(9)<<double(l)/1e6<<endl;
}

#include<bits/stdc++.h>
using namespace std;
const int inf=1<<29;
const double eps=1e-8;
const int maxn=220;
int n,ans=0;
double l=0,r=100,mid=50;
int sqr(int x){return x*x;}
struct point{int x,y;}p[maxn];
struct mgset{
	int tp[maxn],siz[maxn];
	mgset(){for(int i=0;i<=n+3;i++)tp[i]=i,siz[i]=1;}
	void pre(){for(int i=0;i<=n+3;i++)tp[i]=i,siz[i]=1;}
	int get(int x){return x==tp[x]?x:tp[x]=get(tp[x]);}
	void mg(int x,int y){
		x=get(x),y=get(y);
		if(x==y)return;
		if(siz[x]<siz[y])swap(x,y);
		siz[x]+=siz[y],tp[y]=x;
	}
	bool judge(int x,int y){return get(x)==get(y);}
	int ask(int x){return siz[get(x)];}
}s;
bool check(int a,int b,double r){return sqrt(sqr(p[a].x-p[b].x)+sqr(p[a].y-p[b].y))<=r*2;}
bool judge(double r){
	s.pre();
	for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(check(i,j,r))s.mg(i,j);
	for(int i=1;i<=n;i++)if(abs(p[i].y+100)<=r*2)s.mg(i,n+1);
	for(int i=1;i<=n;i++)if(abs(p[i].y-100)<=r*2)s.mg(i,n+2);
	return !s.judge(n+1,n+2);
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d%d",&p[i].x,&p[i].y);
	l=0,r=100,mid=(l+r)/2;
	while(r-l>=eps){
		mid=(l+r)/2;
		if(judge(mid))l=mid;
		else r=mid;
	}
	printf("%.4lf",l);
	return 0;
}