#include<fstream>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
long long int i,n,j,k,cont,rent,t,q,p,ok,z,verif,sum;
double x,y,minim;
struct coada
{
double x,y;
int val;
};
coada c[100090],aux;
bool cmp(coada i,coada j)
{
//functie de comparare aici atan2 - care e defapt tangata unghiului.
return atan2(i.y-y,i.x-x)<atan2(j.y-y,j.x-x);
}
double dist(int x1, int y1, int x2, int y2) {
return sqrt (double((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)));
}
long double mini(long double x,long double y)
{
if(x>y) return y;
return x;
}
int main()
{
freopen ("cmap.in","r",stdin);
freopen ("cmap.out","w",stdout);
scanf("%lld",&n);
for(i=1;i<=n;i++)
{
scanf("%lf%lf",&c[i].x,&c[i].y);
//printf("%lf %lf\n",c[i].x,c[i].y);
x+=c[i].x;
y+=c[i].y;
c[i].val=i;
}
x=x/n;
y=y/n;
sort(c+1,c+n+1,cmp);
c[n+1]=c[1];
minim=100000000;
// printf("%lf\n",dist(c[1].x,c[1].y,c[2].x,c[2].y));
for(i=1;i<=n;i++)
{
// minim=mini(minim,dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y));
/* if(dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y) < minim)
minim=dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y);*/
//printf("%lf\n",dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y));
if(dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y) < minim){
minim=dist(c[i].x,c[i].y,c[i+1].x,c[i+1].y);
//printf("ok");
}
}
printf("%llf\n",minim);
}