#include <bits/stdc++.h>
#include <stdio.h>

using namespace std;
#define ull unsigned long long
#define si short int
#define ll long long
#define pii pair<int, int>

/*-----------------------------------------------------MATH------------------------------------------------*/
inline ll gcd(ll a, ll b) {
    while (b) {
        a %= b;
        swap(a, b);
    }
    return a;
}
inline ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
inline int pwm(ll xx, ll pow, int MD) {
    if (pow < 0) { pow = pow % (MD - 1) + MD - 1; }
    ll mlt = 1;
    while (pow) {
        if (pow & 1) {
            mlt *= xx;
            mlt %= MD;
        }
        xx *= xx;
        pow >>= 1;
        xx %= MD;
    }
    return (int) mlt;
}
inline ll gcdex(ll a, ll b, ll &x, ll &y) {
    if (b == 0) {
        x = 1;
        y = 0;
        return a;
    }
    ll xx, yy;
    ll gc = gcdex(b, a % b, yy, xx);
    x = xx;
    y = yy - (a / b) * xx;
    return gc;
}
inline int inv(ll r, int _mod) { return pwm(r % _mod, _mod - 2, _mod); }
/*-----------------------------------------------------MATH------------------------------------------------*/

const int inf = 1e9;
const int MAXN = 2e5 + 10;
ll mod = 1e9 + 7;
vector<long double> x;
vector<long double> y;
bool was[1001][1001];
bool check1(long double x1,long  double y1,long  double r){
    int n=x.size();
    for(int i=0;i<n;i++){
            if((x1-x[i])*(x1-x[i])+(y1-y[i])*(y1-y[i])>r*r+1e-12) return false;
    }
    return true;
}

bool check(long double r){
    int n=x.size();
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(i==j) continue;
            if(x[i]==x[j]){
                long double yc=(y[i]+y[j])/2.;
                long double sh=(yc-y[i])*(yc-y[i]);
                long double wt=r*r-sh;
                if(wt<0) continue;
                if(check1(sqrt(wt)+x[i], yc, r)){
                    return true;
                }
                if(check1(-sqrt(wt)+x[i], yc, r)){
                    return true;
                }
            }
            else if(y[i]==y[j]){
                long double xc=(x[i]+x[j])/2.;
                long double sh=(xc-x[i])*(xc-x[i]);
                long double wt=r*r-sh;
                if(wt<0) continue;
                if(check1(xc, sqrt(wt)+y[i], r)){
                    return true;
                }
                if(check1(xc, -sqrt(wt)+y[i], r)){
                    return true;
                }
            }
            else{
                long double c1=(y[i]-y[j])/(x[j]-x[i]);
                long double c22=(x[i]*x[i]-x[j]*x[j]+y[i]*y[i]-y[j]*y[j])/2./(x[i]-x[j]);
                long double c2=c22-x[i];
                long double a=(1.+c1*c1);
                long double b=2.*c1*c2-2.*y[i];
                long double c=c2*c2+y[i]*y[i]-r*r;
                long double D=b*b-4.*a*c;
                if(D<0.) continue;
                long double y1=(-b+sqrt(D))/2./a;
                long double x1=y1*c1+c22;
                long double y2=(-b-sqrt(D))/2./a;
                long double x2=y2*c1+c22;
                if(check1(x1,y1,r)){
                    return true;
                }
                if(check1(x2,y2,r)){
                    return true;
                }
            }
        }
    }
    return false;
}

void solve(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        int x1,y1;
        cin>>x1>>y1;
        x.push_back(x1);
        y.push_back(y1);
    }
    int MX=50;
    long double l=0.;
    long double r=1000.;
    for(int i=0;i<MX;i++){
        long double m=l+(r-l)/2.;
        if(check(m)){
            r=m;
        }
        else l=m;
    }
    cout.precision(10);
    cout<<fixed<<r;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n=1;
    for (int i = 0; i < n; i++) solve();
    return 0;
}

Measured memory_bytes: 256