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

#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()
#define MIN(a) *min_element(all(a))
#define MAX(a) *max_element(all(a))
#define SUM(a) accumulate(all(a), 0LL)
#define REP(i, n) for(int (i)=0; (i)<(n); (i)++)
#define RREP(i, n) for(int (i)=(n)-1; (i)>=0; (i)--)
#define FOR(i, m, n) for(int (i)=(m); (i)<(n); i++)
#define FORR(i, m, n) for(int (i)=(n)-1; (i)>=(m); i--)
#define debug(x) cerr << #x << " = " << x << endl
//#define int long long

typedef long long ll;
//ll const MOD = 998244353;
ll const MOD = 1e9+7;
int const inf = 1e9;
ll const INF = 1e18;

inline void ios_(){cin.tie(0); ios::sync_with_stdio(false);}
template<typename T> int size(const T& a){return (int)a.size();}
template<typename T> T Div(T a, T b){return (a + b - 1) / b;}
template<typename T> bool chmin(T& a, const T& b){if(a > b){a = b; return true;} return false;}
template<typename T> bool chmax(T& a, const T& b){if(a < b){a = b; return true;} return false;}

template<typename T>
struct Coordinate {
    T x;
    T y;

    constexpr Coordinate(T x = 0, T y = 0) : x(x), y(y) {}

    static T squareDist(const Coordinate& c1, const Coordinate& c2) {
        return (c1.x - c2.x) * (c1.x - c2.x) + (c1.y - c2.y) *(c1.y - c2.y);
    }

    constexpr T norm() {
        return std::sqrt(squareNorm());
    }

    constexpr T squareNorm() {
        return x*x + y*y;
    }

    Coordinate operator-() const {
        return Coordinate(-x, -y);
    }

    Coordinate operator+(const Coordinate& c) const {
        return Coordinate(x + c.x, y + c.y);
    }

    Coordinate operator-(const Coordinate& c) const {
        return Coordinate(x - c.x, y - c.y);
    }

    Coordinate operator*(const T& t) const {
        return Coordinate(x * t, y * t);
    }

    Coordinate operator/(const T& t) const {
        return Coordinate(x / t, y / t);
    }
};

using coord = Coordinate<double>;


signed main(){
    int n;
    cin >> n;
    
    vector<coord> center(n);
    for(auto& i : center) cin >> i.x >> i.y;

    double ng = 0.0, ok = 1500;
    const double eps = 1e-8;

    while(ok - ng > eps) {
        double r = (ok + ng) / 2;
        vector<coord> intersection;

        REP(i, n) {
            FOR(j, i+1, n) {
                const coord& c1 = center[i], c2 = center[j];
                coord c21 = c2 - c1;
                double h = r*r - c21.squareNorm() / 4.0;
                if(h < 0.0) continue;
                double cos_ = c21.x / c21.norm(), sin_ = c21.y / c21.norm();

                coord d(-sin_ * sqrt(h), cos_ * sqrt(h));
                intersection.emplace_back(((c1 + c2) / 2) + d);
                intersection.emplace_back(((c1 + c2) / 2) - d);
            }
        }

        bool enclose = false;

        for(const auto& i : intersection) {
            enclose = true;
            for(const auto& c : center) {
                enclose &= r*r - coord::squareDist(i, c) > -1e-10;
            }
            if(enclose) {
                break;
            }
        }

        if(enclose) {
            ok = r;
        } else {
            ng = r;
        }
    }

    cout << fixed << setprecision(12) << ok << endl;
}


Measured memory_bytes: 408