#include<bits/stdc++.h>
using namespace std;

using pdd = pair<double, double> ;
const pdd fail = {-1e9, -1e9};
void lineFromPoints(pdd P, pdd Q, double &a,
                        double &b, double &c)
{
    a = Q.second - P.second;
    b = P.first - Q.first;
    c = a*(P.first)+ b*(P.second);
}
void perpendicularBisectorFromLine(pdd P, pdd Q,
                 double &a, double &b, double &c)
{
    pdd mid_point = make_pair((P.first + Q.first)/2,
                            (P.second + Q.second)/2);

    // c = -bx + ay
    c = -b*(mid_point.first) + a*(mid_point.second);

    double temp = a;
    a = -b;
    b = temp;
}

// Returns the intersection point of two lines
pdd lineLineIntersection(double a1, double b1, double c1,
                         double a2, double b2, double c2)
{
    double determinant = a1*b2 - a2*b1;
    if (determinant == 0)
    {
        // The lines are parallel. This is simplified
        // by returning a pair of FLT_MAX
        return make_pair(FLT_MAX, FLT_MAX);
    }

    else
    {
        double x = (b2*c1 - b1*c2)/determinant;
        double y = (a1*c2 - a2*c1)/determinant;
        return make_pair(x, y);
    }
}

pdd findCircumCenter(pdd P, pdd Q, pdd R)
{
    double a, b, c;
    lineFromPoints(P, Q, a, b, c);

    double e, f, g;
    lineFromPoints(Q, R, e, f, g);

    perpendicularBisectorFromLine(P, Q, a, b, c);
    perpendicularBisectorFromLine(Q, R, e, f, g);

    pdd circumcenter =
           lineLineIntersection(a, b, c, e, f, g);

    if (circumcenter.first == FLT_MAX &&
        circumcenter.second == FLT_MAX)
    {
        return fail;
    }

    else
    {
        return make_pair(circumcenter.first , circumcenter.second);
    }
}
using ld = long double;
ld ans = 1e17;
pdd p[55];
ld sq(ld x){
    return x * x;
}
ld sqdist(pdd x, pdd y){
    ld res = sq(x.first - y.first) +  sq(x.second - y.second);
    return res;
}
const ld eps = 1e-9;
bool eq(ld x, ld y){
    return fabsl(x - y) < eps;
}
bool lseq(ld x, ld y){
    return eq(x, y) || x < y;
}
// Driver code.
int n;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n;
    for(int i = 1 ;i <= n ;i ++){
        cin >> p[i].first >>  p[i].second;
    }
    for(int i = 1 ;i <= n ;i++){
        for(int j = i + 1 ;j <= n ; j++){
            for(int k = j  +1 ;k <= n ; k ++){
                {
                    auto x = findCircumCenter(p[i], p[j], p[k]);
                    if(x == fail) continue;
                    ld rad = sqdist(p[i], x);
                    bool ok = true;
                    for(int v = 1 ; v <= n ;v ++){
                        ok &= lseq(sqdist(x, p[v]), rad);
                    }
                    if(ok) ans = min(ans, sqrt(rad));
                }
            }
        }
    }
    for(int i = 1 ;i <= n ;i++){
        for(int j = i + 1 ; j <= n ;j++){
            pdd midpoint = make_pair((p[i].first + p[j].first) / 2.0 , (p[i].second + p[j].second) / 2.0);
            bool ok = true;
            ld rad = sqdist(p[i], midpoint);
            for(int v = 1 ; v <= n ; v ++){
                ok &= lseq(sqdist(midpoint, p[v]), rad);
            }
            if(ok) ans = min(ans, sqrt(rad));
        }
    }
    cout.precision(20);
    cout << fixed;
     cout << ans << '\n';
}


Measured memory_bytes: 256