#include <iostream>
#include <cstdio>
#include <algorithm>
#include <math.h>// 3 1 1 5 5 4 4
using namespace std;
double d=1e9;
struct node{
int x,y;
}a[100];
double f(node l,node r){
return sqrt(pow(r.x-l.x,2)+pow(r.y-l.y,2));
}
bool cmp1(node c,node d){
return c.x<d.x;
}
bool cmp2(node c,node d){
return c.y<d.y;
}
void merge(int l,int r){
int index=0;
node p[100];
int mid=(l+r)>>1;
for(int i=l;i<=mid;++i)
if(a[mid].x-a[i].x<d){
p[index].x=a[i].x;
p[index++].y=a[i].y;
}
for(int i=mid+1;i<=r;++i){
if(a[r].x-a[i].x<d){
p[index].x=a[i].x;
p[index++].y=a[i].y;
}
}
sort(p,p+index,cmp2);
for(int i=0;i<index-1;++i){
for(int j=i+1;j<index;++j){
if(p[j].y-p[i].y>d)
break;
d=min(d,f(p[i],p[j]));
}
}
}
void mergesort(int l,int r){
if(r-l==1){
d=min(d,f(a[l],a[r]));
return ;
}
int mid=(l+r)>>1;
// printf("l=%d,r=%d,mid=%d\n",l,r,mid);
mergesort(l,mid);
mergesort(mid,r);//非mid+1
merge(l,r);
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;++i){
cin>>a[i].x>>a[i].y;
}
sort(a,a+n,cmp1);
// for(int i=0;i<n;++i){
// cout<<a[i].x<<" "<<a[i].y<<endl;
// }
mergesort(0,n-1);
cout<<d<<endl;
}