#include<stdio.h>
#include<cmath>
#include<iostream>
#include<algorithm>
#define N 50000000;
{
double x;
double y;
}p[100005];
int a[100005];
int n;
double min(double a,double b)
{
return a<b?a:b;
}
bool cmpx(node a,node b)
{
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
bool cmpy(int a,int b)
{
return p[a].y<p[b].y;
}
double getDis(node a,node b)
{
double xx=a.x-b.x;
double yy=a.y-b.y;
return sqrt(xx*xx+yy*yy);
}
double find(int lt,int rt)
{
if(lt+1==rt) return getDis(p[lt],p[rt]);
if(lt+2==rt) return min(getDis(p[lt],p[lt+1]),min(getDis(p[lt+1],p[rt]),getDis(p[rt],p[lt])));
int mid=(lt+rt)/2;
//cout<<"hhhhhhhhhhhhhhhhhhh="<<cnt<<endl;
for(i=lt;i<=rt;i++)
{
if(p[i].x-p[mid].x<ans&&p[mid].x-p[i].x<ans)
{
a[cnt++]=i;
}
}
sort(a,a+cnt,cmpy);
for(i=0;i<cnt;i++)
{
for(j=i+1;j<cnt;j++)
{
if(p[a[j]].y-p[a[i]].y>=ans) break;
ans=min(ans,getDis(p[a[i]],p[a[j]]));
}
}
return ans;
}
int main()
{
int i;
while(scanf("%d",&n)!=EOF)
{
if(!n) break;
for(i=0;i<n;i++)
scanf("%lf %lf",&p[i].x,&p[i].y);
sort(p,p+n,cmpx);
printf("%.2lf%\n",find(0,n-1)/2);
}
return 0;
}
#include<cmath>
#include<iostream>
#include<algorithm>
#define N 50000000;
using namespace std;
//下面的结构体名称一定要有,(node),结构体的数据类型一定是double,之前写的时候是int,肯定是错的。结构体末尾定义了结构体数组;
struct node{
double x;
double y;
}p[100005];
int a[100005];
int n;
double min(double a,double b)
{
return a<b?a:b;
}
bool cmpx(node a,node b)
{
if(a.x==b.x) return a.y<b.y;
return a.x<b.x;
}
bool cmpy(int a,int b)
{
return p[a].y<p[b].y;
}
double getDis(node a,node b)
{
double xx=a.x-b.x;
double yy=a.y-b.y;
return sqrt(xx*xx+yy*yy);
}
double find(int lt,int rt)
{
if(lt+1==rt) return getDis(p[lt],p[rt]);
if(lt+2==rt) return min(getDis(p[lt],p[lt+1]),min(getDis(p[lt+1],p[rt]),getDis(p[rt],p[lt])));
int mid=(lt+rt)/2;
double ans=min(find(lt,mid),find(mid+1,rt));
//这里的cnt一定,一定,一定要初始化,从这里可以反思出,如果定义一个变量,首先一定要考虑需不需要进行初始化,或者可能导致空指针
//而且这个在编译链接的时候不会报错,只有运行的 时候才可能会被发现。所以定义变量的时候一定要进行初始化。
int i,j,cnt=0;//cout<<"hhhhhhhhhhhhhhhhhhh="<<cnt<<endl;
for(i=lt;i<=rt;i++)
{
if(p[i].x-p[mid].x<ans&&p[mid].x-p[i].x<ans)
{
a[cnt++]=i;
}
}
sort(a,a+cnt,cmpy);
for(i=0;i<cnt;i++)
{
for(j=i+1;j<cnt;j++)
{
if(p[a[j]].y-p[a[i]].y>=ans) break;
ans=min(ans,getDis(p[a[i]],p[a[j]]));
}
}
return ans;
}
int main()
{
int i;
while(scanf("%d",&n)!=EOF)
{
if(!n) break;
for(i=0;i<n;i++)
scanf("%lf %lf",&p[i].x,&p[i].y);
sort(p,p+n,cmpx);
printf("%.2lf%\n",find(0,n-1)/2);
}
return 0;
}