#include<bits/stdc++.h>
using namespace std;
typedef double db;
const db inf =1e9;
const int N=1e5+10;
struct Point{
db x,y;
void input(){scanf("%lf%lf",&x,&y);}
db dis(Point p){return sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));}
}A[N];
bool cmp2(Point a,Point b){return a.y<b.y;}
db Closest(int l,int r){
if(l==r)return inf;
if(r==l+1)return A[l].dis(A[r]);
int mid=(l+r)/2;
db ans=min(Closest(l,mid-1),Closest(mid+1,r));
vector<Point> V;V.push_back(A[mid]);
int now=mid-1;while(now>=l&&A[mid].x-A[now].x<=ans)V.push_back(A[now]),--now;
now=mid+1;while(now<=r&&A[now].x-A[mid].x<=ans)V.push_back(A[now]),++now;
sort(V.begin(),V.end(),cmp2);
now=0;
for(int i=0;i<V.size();++i){
while(now<V.size()&&V[now].y-V[i].y<=ans)++now;
for(int j=i;j<now;++j)for(int k=j+1;k<now;++k)ans=min(ans,V[j].dis(V[k]));
}
return ans;
}
bool cmp(Point a,Point b){return a.x<b.x;}
int main(){
int n;while(cin>>n&&n){
for(int i=1;i<=n;++i)A[i].input();
sort(A+1,A+1+n,cmp);
printf("%.2lf\n",Closest(1,n)/2);
}
}