#include <iostream>
#include <algorithm>
#include <fstream>
#include <math.h>
#include <vector>
#include <iomanip>
using namespace std;
struct punct
{
int x,y;
}X, dreapta;
vector <punct> v,y;
int n,i,j,a,b,c,d,e,f,g,h,xmin,ymin,xminn, yminn,aa,bb,cc,dd,ee,fff,ggg,hh;
double s=1000000000,smin1=1000000000,smin2=1000000000, smin=1000000000, s1=1000000000, s2=1000000000, s3=1000000000;
ifstream ff("cmap.in");
ofstream gg("cmap.out");
double Euclid (punct A , punct B)
{
return (sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y)));
}
bool comparare (punct A, punct B)
{
return ((A.x<B.x) || (A.x==B.x) && (A.y<B.y));
}
bool comp (punct A, punct B)
{
return (A.y<B.y);
}
void SolutieS(int st, int dr) //apelul recursiv pt partea stanga
{
if((st+dr)>2){ dr=(st+dr)/2;
if((dr-st+1)==2) {s=Euclid(v[st],v[dr]); a=v[st].x; b=v[st].y; aa=v[dr].x; bb=v[dr].y;}
else { s1=Euclid(v[st],v[dr]); c=v[st].x; d=v[st].y; cc=v[dr].x; dd=v[dr].y;
s2=Euclid(v[st],v[st+1]); e=v[st].x; f=v[st].y; ee=v[st+1].x; fff=v[st+1].y;
s3=Euclid(v[st+1],v[dr]); g=v[st+1].x; h=v[st+1].y; ggg=v[dr].x; hh=v[dr].y;
}
if(smin>s) {smin=s; xmin=a; ymin=b;xminn=aa; yminn=bb;}
if(smin>s1) {smin=s1; xmin=c; ymin=d; xminn=cc; yminn=dd;}
if(smin>s2) {smin=s2; xmin=e; ymin=f; xminn=ee; yminn=fff;}
if(smin>s3) {smin=s3; xmin=g; ymin=h; xminn=ggg; yminn=hh;}
SolutieS(st,dr);
for(i=dr; i>=st; i--)
if(abs(v[st].x-v[i].x)<=smin) y.push_back(v[i]);
}
}
void SolutieD(int st, int dr) //apelul recursiv pt partea dreapta
{
if((dr-st+1)>3){ st=(st+dr)/2 + 1;
if((dr-st+1)==2) {s=Euclid(v[st],v[dr]); a=v[st].x; b=v[st].y; aa=v[dr].x; bb=v[dr].y;}
else { s1=Euclid(v[st],v[dr]); c=v[st].x; d=v[st].y; cc=v[dr].x; dd=v[dr].y;
s2=Euclid(v[st],v[st+1]); e=v[st].x; f=v[st].y; ee=v[st+1].x; fff=v[st+1].y;
s3=Euclid(v[st+1],v[dr]); g=v[st+1].x; h=v[st+1].y; ggg=v[dr].x; hh=v[dr].y;
}
if(smin>s) {smin=s; xmin=a; ymin=b; xminn=aa; yminn=bb;}
if(smin>s1) {smin=s1; xmin=c; ymin=d; xminn=cc; yminn=dd;}
if(smin>s2) {smin=s2; xmin=e; ymin=f; xminn=ee; yminn=fff;}
if(smin>s3) {smin=s3; xmin=g; ymin=h; xminn=ggg; yminn=hh;}
SolutieD(st,dr);
for(i=st; i<=dr; i++)
if(abs(v[st].x-v[i].x)<=smin) y.push_back(v[i]);
}
}
int main()
{
ff>>n;
for(i=1;i<=n;i++)
{
ff>>X.x>>X.y;
v.push_back(X);
}
sort(v.begin(),v.end(),comparare);
//for(vector<punct> :: iterator it=v.begin() ; it!=v.end() ; ++it)
// g<<it->x<<" ";
if(n==2) {smin=Euclid(v[0],v[1]);
xmin=v[0].x; ymin=v[0].y;
xminn=v[1].x; yminn=v[1].y;SolutieD(0,n-1);}
else
{SolutieS(0,n-1);
if(smin1<smin) smin=smin1;
if(smin2<smin) smin=smin2;
sort(y.begin(),y.end(),comp);
for(i=0; i<y.size(); i++)
for(j=i+1; j<y.size() && j<=i+7; j++)
if(y[i].x!=y[j].x || y[i].y!=y[j].y)
{
s=Euclid(y[i],y[j]);
if(smin>s) smin=s;
}
}
gg<<fixed<<setprecision(6)<<smin<<endl;
//gg<<xmin<<" "<<ymin<<endl;
//gg<<xminn<<" "<<yminn;
ff.close();
gg.close();
return 0;
}