#include<stdio.h>
#include<vector>
#include<fstream>
#include<cmath>
#include<tuple>
#include<stdio.h>
using namespace std;
typedef pair<int8_t,int8_t> point;
int dist(point p1,point p2)
{
return (p1.first-p2.first)*(p1.first-p2.first)+(p1.second-p2.second)*(p1.second-p2.second);
}
void merge(vector<point> &v,vector<point> &aux,int left,int right,int m)
{
int a=left,b=m+1,k=0;
while(a<=m && b<=right)
if(v[a].second<v[b].second)
aux[k++]=v[a++];
else
aux[k++]=v[b++];
while(a<=m) aux[k++]=v[a++];
while(b<=right) aux[k++]=v[b++];
for(int i=0;i<k;++i) v[left+i]=aux[i];
}
tuple<int,int,int> solve(vector<point> &v,vector<point> &aux,int left,int right)
{
if(right-left<2)
if(left==right) return make_tuple(1<<30,1<<30,1<<30);
else
{
merge(v,aux,left,right,left);
return make_tuple(dist(v[left],v[right]),left,right);
}
int m=(left+right)/2;
tuple<int,int,int> sol=min(solve(v,aux,left,m),solve(v,aux,m+1,right));
merge(v,aux,left,right,m);
for(int i=left;i<=right;++i)
for(int j=i-1;j>=left && i-j<8;--j)
sol=min(sol,make_tuple(dist(v[i],v[j]),j,i));
return sol;
}
int main()
{
int n,i,j,x,s=0;
vector<point> v;
vector<point> aux;
ifstream file;
file.open("cmap.in");
file>>n;
v.resize(n);
aux.resize(n);
for(i=0;i<n;i++)
{
file>>x>>s;
v[i]=make_pair(x,s);
}
file.close();
tuple<int,int,int> sol=solve(v,aux,0,n-1);
FILE *out=fopen("cmap.out","w");
fprintf(out,"%6f\n", sqrt(get<0>(sol)));
}