//譛?ソ醍せ蟇ケ
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;

#define N 1000010

struct point
{
 double x;
 double y;
}p1[N],p2[N];

double dis ( point a , point b )
{
 return sqrt( pow (a.x-b.x,2) + pow ( a.y-b.y,2 ) );
}

double min ( double a , double b )
{
 return a<b?a:b;
}

bool cpx ( point a , point b )
{
 return a.x < b.x ;
}
bool cpy ( point a , point b )
{
 return a.y < b.y ;
}

double mindis ( int l , int r )
{
 if( l + 1 == r )
  return dis ( p1[l] ,p1[r] );
 if( l + 2 == r )
  return min ( dis ( p1[l] , p1[l+1] ) , min ( dis ( p1[l+1] , p1[r] ) , dis ( p1[l] , p1[r] ) ) );
 else
 {
  int mid , count=0 ;
  double mini;
  mid = ( l + r) >> 1 ;
  mini = min ( mindis ( l , mid ) , mindis ( mid+1 , r ) );
  for( int i = l ; i <= r ; i++ )
  {
   if ( fabs ( p1[i].x - p1[mid].x ) <= mini )
    p2[count++]=p1[i];
  }
  sort ( p2 , p2+count , cpy );
  for ( i=0 ; i < count ; i++ )
  {
   for ( int j = i+1; j < count ;j++)
   {
    if ( p2[j].y-p2[i].y>=mini)
     break;
    else
     if(dis (p2[j],p2[i])<mini)
      mini=dis(p2[j],p2[i]);
   }
  }
  return mini;
 }
}
  
  

int main()
{
 //freopen("input.txt","r",stdin);
 int n ;
 double dia ;
 while(scanf("%d",&n)==1&&n)
 {
  for(int i=0;i<n;i++)
   scanf("%lf%lf",&p1[i].x,&p1[i].y);
  sort ( p1 , p1 + n-1 , cpx );
  dia = mindis ( 0 , n-1 );
  printf("%.2f\n", dia / 2 );
 }
 return 0;
}