// #pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define N 1000000007
#define N2 998244353
#define Nmax 2000005
#define INF (ll)1e18
#define pll pair<ll,ll>
#define mp make_pair
#define fi first
#define se second
#define vv vector
#define rep(i,n) rep2(i,0,n)
#define rep2(i,m,n) for(ll i=m;i<(n);i++)
#define repr(i,n) repr2(i,n,0)
#define repr2(i,m,n) for(ll i=m;i>=(n);i--)
#define get(n) ll (n); scanf("%lld",&(n));
#define get2(n,k) ll (n),(k); scanf("%lld%lld",&(n),&(k));
#define get3(n,m,k) ll (n),(m),(k); scanf("%lld%lld%lld",&(n),&(m),&(k));
#define gets(s) string (s); cin >> (s);
#define ALL(c) (c).begin(),(c).end()
#define fill_nums(A,n) vector<ll> A((n)); for(ll i=0;i<n;i++) scanf("%lld",&A[i]);
#define fill_edges(adj,m) for(ll i=0;i<m;i++) {ll a, b; scanf("%lld %lld",&a,&b); adj[a-1].pb(b-1); adj[b-1].pb(a-1);}
#define fill_direct(adj,m) for(ll i=0;i<m;i++) {ll a, b; scanf("%lld %lld",&a,&b); adj[a-1].pb(b-1);}
#define StarBurstStream ios_base::sync_with_stdio(false); cin.tie(0); //cout.tie(0);
#define pi 3.1415926535897
#define db double
#define noop
#define flu fflush(stdout)
#define imp {cout<<"NO\n"; return 0;}
#define debug_vec(vec,n) {rep(idxi,n) cout<<vec[idxi]<<" "; cout<<"\n";}
#define debug_pvec(vec,n) {rep(idxi,n) cout<<vec[idxi].fi<<"-"<<vec[idxi].se<<"  "; cout<<"\n";}
#define debug_set(seta) {cout<<seta.size()<<"\n"; for(auto idxi:seta) cout<<idxi<<" "; cout<<"\n";}
#define debug_map(mappa) {cout<<mappa.size()<<"\n";for(auto idxi:mappa) cout<<idxi.fi<<"-"<<idxi.se<<"  "; cout<<"\n";}

ll n;
vector<pll> A(51);
double res = INT_MAX;

double dist(double a, double b, double c, double d) {
    return (a-c)*(a-c)  + (b-d)*(b-d);
}

void solve3(double x1, double y1, double x2, double y2, double x3, double y3) 
{ 
    double x12 = x1 - x2; 
    double x13 = x1 - x3; 
  
    double y12 = y1 - y2; 
    double y13 = y1 - y3; 
  
    double y31 = y3 - y1; 
    double y21 = y2 - y1; 
  
    double x31 = x3 - x1; 
    double x21 = x2 - x1; 
  
    double sx13 = pow(x1, 2) - pow(x3, 2); 
    double sy13 = pow(y1, 2) - pow(y3, 2); 
  
    double sx21 = pow(x2, 2) - pow(x1, 2); 
    double sy21 = pow(y2, 2) - pow(y1, 2); 
  
    double f = ((sx13) * (x12) 
             + (sy13) * (x12) 
             + (sx21) * (x13) 
             + (sy21) * (x13)) 
            / (double)(2 * ((y31) * (x12) - (y21) * (x13))); 
    double g = ((sx13) * (y12) 
             + (sy13) * (y12) 
             + (sx21) * (y13) 
             + (sy21) * (y13)) 
            / (double)(2 * ((x31) * (y12) - (x21) * (y13))); 
  
    double c = -pow(x1, 2) - pow(y1, 2) - 2 * g * x1 - 2 * f * y1; 

    double h = -g; 
    double k = -f; 
    double sqr_of_r = h * h + k * k - c; 

    rep(i,n) {
        if(dist(h,k,A[i].fi,A[i].se) > sqr_of_r + 1e-6)
            return;
    }
    res = min(res, sqrt(sqr_of_r));
}

void solve2(double x1, double y1, double x2, double y2) {

    double h = (x1+x2)/2.0;
    double k = (y1+y2)/2.0;
    double sqr_of_r = (h-x1)*(h-x1) + (k-y1)*(k-y1);
    // cout<<h<<" "<<k<<" "<<sqr_of_r<<endl;

    rep(i,n) {
        // cout<<dist(h,k,A[i].fi,A[i].se)<<endl;
        if(dist(h,k,A[i].fi,A[i].se) > sqr_of_r + 1e-6)
            return;
    }
    res = min(res, sqrt(sqr_of_r));
}

int main() {
    
    cin >> n;    
    rep(i,n) {
        get2(a,b);
        A[i] = {a,b};
    }

    rep(i,n) {
        rep2(j,i+1,n) {
            solve2(A[i].fi,A[i].se,A[j].fi,A[j].se);
        }
    }

    rep(i,n) {
        rep2(j,i+1,n) {
            rep2(k,j+1,n) {
                solve3(A[i].fi,A[i].se,A[j].fi,A[j].se,A[k].fi, A[k].se);
            }
        }
    }
    printf("%.10f\n", res);
    return 0;  
}

Measured memory_bytes: 256