#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template<class S, class T> inline S max_L(S a,T b){
  return a>=b?a:b;
}
inline void rd(int &x){
  int k;
  int m=0;
  x=0;
  for(;;){
    k = getchar_unlocked();
    if(k=='-'){
      m=1;
      break;
    }
    if('0'<=k&&k<='9'){
      x=k-'0';
      break;
    }
  }
  for(;;){
    k = getchar_unlocked();
    if(k<'0'||k>'9'){
      break;
    }
    x=x*10+k-'0';
  }
  if(m){
    x=-x;
  }
}
inline void rd(double &x){
  scanf("%lf",&x);
}
inline void wt_L(char a){
  putchar_unlocked(a);
}
inline void wt_L(int x){
  int s=0;
  int m=0;
  char f[10];
  if(x<0){
    m=1;
    x=-x;
  }
  while(x){
    f[s++]=x%10;
    x/=10;
  }
  if(!s){
    f[s++]=0;
  }
  if(m){
    putchar_unlocked('-');
  }
  while(s--){
    putchar_unlocked(f[s]+'0');
  }
}
inline void wt_L(unsigned x){
  int s=0;
  char f[10];
  while(x){
    f[s++]=x%10;
    x/=10;
  }
  if(!s){
    f[s++]=0;
  }
  while(s--){
    putchar_unlocked(f[s]+'0');
  }
}
inline void wt_L(long long x){
  int s=0;
  int m=0;
  char f[20];
  if(x<0){
    m=1;
    x=-x;
  }
  while(x){
    f[s++]=x%10;
    x/=10;
  }
  if(!s){
    f[s++]=0;
  }
  if(m){
    putchar_unlocked('-');
  }
  while(s--){
    putchar_unlocked(f[s]+'0');
  }
}
inline void wt_L(unsigned long long x){
  int s=0;
  char f[21];
  while(x){
    f[s++]=x%10;
    x/=10;
  }
  if(!s){
    f[s++]=0;
  }
  while(s--){
    putchar_unlocked(f[s]+'0');
  }
}
inline void wt_L(double x){
  printf("%.15f",x);
}
inline void wt_L(const char c[]){
  int i=0;
  for(i=0;c[i]!='\0';i++){
    putchar_unlocked(c[i]);
  }
}
inline void wt_L(string &x){
  int i=0;
  for(i=0;x[i]!='\0';i++){
    putchar_unlocked(x[i]);
  }
}
template<class T> inline T pow2_L(T a){
  return a*a;
}
template<class S, class T> inline S chmin(S &a, T b){
  if(a>b){
    a=b;
  }
  return a;
}
int N;
double X[50];
double Y[50];
double dist[50];
int main(){
  int e98WHCEY;
  int i;
  int k;
  double cx = 0;
  double cy = 0;
  double mv = 1;
  double r = 0.999;
  double res = 1e150;
  rd(N);
  {
    int Lj4PdHRW;
    for(Lj4PdHRW=(0);Lj4PdHRW<(N);Lj4PdHRW++){
      rd(X[Lj4PdHRW]);
      rd(Y[Lj4PdHRW]);
    }
  }
  for(e98WHCEY=(0);e98WHCEY<(100000);e98WHCEY++){
    for(i=(0);i<(N);i++){
      dist[i] =pow2_L((X[i]-cx))+pow2_L((Y[i]-cy));
    }
    {
      int WYIGIcGE;
      double t_ynMSdg;
      if(N==0){
        t_ynMSdg = 0;
      }
      else{
        t_ynMSdg = dist[0];
        for(WYIGIcGE=(1);WYIGIcGE<(N);WYIGIcGE++){
          t_ynMSdg = max_L(t_ynMSdg, dist[WYIGIcGE]);
        }
      }
      chmin(res, t_ynMSdg);
    }
    {
      int a2conNHc;
      int hCmBdyQB = 0;
      double V9aVTaxx;
      double APIVbQlN;
      int YREPHmFM;
      for(a2conNHc=(0);a2conNHc<(((N)-1)+1);a2conNHc++){
        APIVbQlN = dist[a2conNHc];
        if(hCmBdyQB==0 || V9aVTaxx<APIVbQlN){
          V9aVTaxx = APIVbQlN;
          hCmBdyQB = 1;
          YREPHmFM = a2conNHc;
        }
      }
      k =YREPHmFM;
    }
    cx += mv * (X[k] - cx);
    cy += mv * (Y[k] - cy);
    mv *= r;
  }
  wt_L(sqrt(res));
  wt_L('\n');
  return 0;
}
// cLay varsion 20200119-1

// --- original code ---
// int N; double X[50], Y[50], dist[50];
// {
//   int i, k;
//   double cx = 0, cy = 0, mv = 1, r = 0.999, res = double_inf;
//   rd(N,(X,Y)(N));
//   rep(100000){
//     rep(i,N) dist[i] = (X[i]-cx)**2 + (Y[i]-cy)**2;
//     res <?= max(dist(N));
//     k = argmax(dist(N));
//     cx += mv * (X[k] - cx);
//     cy += mv * (Y[k] - cy);
//     mv *= r;
//   }
//   wt(sqrt(res));
// }


Measured memory_bytes: 256