#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;
ifstream fin("cmap.in");
ofstream fout("cmap.out");
const long long inf=4e18;
const int Max_N=100005;
vector<pair<long long,long long> > temp(Max_N);
long long dist(pair<int,int> p1, pair<int,int> p2)
{
return (long long)(p1.first-p2.first)*(p1.first-p2.first)+(long long)(p1.second-p2.second)*(p1.second-p2.second);
}
bool CmpX(pair<int,int>p1,pair<int,int>p2)
{ return p1.first<p2.first;
}
bool CmpY(pair<int,int>p1,pair<int,int>p2)
{ return p1.second<p2.second;
}
long long minDistance(vector<pair<int,int> > &v,vector<pair<int,int> > &y,int st,int dr)
{ if(dr==st)
return inf;
if(dr-st==1)
{
if(y[st].first>y[st+1].first)
swap(y[st],y[st+1]);
return dist( v[st],v[st+1]);
}
int m=(st+dr)/2;
long long d,d1,d2,delta;
int i,j;
d1=minDistance(v,y,m+1,dr);
d2=minDistance(v,y,st,m);
d=min(d1,d2);
delta=(int) ceil(sqrt(d));
merge(y.begin() + st, y.begin() + m, y.begin() + m, y.begin() + dr, temp.begin());
copy(temp.begin(), temp.begin() + (dr - st), y.begin() + st);
vector<pair<int,int> > temp2;
for(i=st;i<=dr;i++)
if(abs(y[i].second-v[m].first)<=delta)
temp2.push_back(y[i]);
for(i=0;i<temp.size();i++)
for(j=i+1;j<=i+7 && j<temp2.size();j++)
d=min(d,dist(temp2[i],temp2[j]));
return d;
}
int main()
{ int n,i,x,y;
vector<pair<int,int> > v,z;
fin>>n;
for(i=0;i<n;i++)
{
fin>>x>>y;
v.push_back(make_pair(x,y));
}
sort(v.begin(),v.end(),CmpX);
for(i=0;i<n;i++)
z.push_back(make_pair(v[i].second,v[i].first));
fout<<fixed<<setprecision(6)<<sqrt(minDistance(v,z,0,n-1));
fin.close();
fout.close();
return 0;
}