#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
#define all(x) (x).begin(), (x).end()
#define MOD 1000000007
vector<long double> calcCircleOf2Point(long double x1, long double y1,
                                       long double x2, long double y2,
                                       long double x3, long double y3) {
    long double ox, oy, a, b, c, d;
    long double r1, r2, r3;

    a = x2 - x1;
    b = y2 - y1;
    c = x3 - x1;
    d = y3 - y1;

    int stat = -1;
    vector<long double> res;
    if((a && d) || (b && c)) {
        ox = x1 +
             (d * (a * a + b * b) - b * (c * c + d * d)) / (a * d - b * c) / 2;
        if(b) {
            oy = (a * (x1 + x2 - ox - ox) + b * (y1 + y2)) / b / 2;
        } else {
            oy = (c * (x1 + x3 - ox - ox) + d * (y1 + y3)) / d / 2;
        }
        r1 = sqrt((ox - x1) * (ox - x1) + (oy - y1) * (oy - y1));
        r2 = sqrt((ox - x2) * (ox - x2) + (oy - y2) * (oy - y2));
        r3 = sqrt((ox - x3) * (ox - x3) + (oy - y3) * (oy - y3));
        long double cx = ox;
        long double cy = oy;
        long double r = (r1 + r2 + r3) / 3.0;
        stat = 0;
        res.push_back(cx);
        res.push_back(cy);
        res.push_back(r);
    }
    return res;
}
long double dist(long double x1, long double x2, long double y1,
                 long double y2) {
    return sqrtl((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
/*
vector<double> (double x1,double x2,double x3,double y1,double y2,double y3){
    double a,b;
    a=
}
*/

int main() {
    int n;
    cin >> n;
    long double eps = 1e-9;
    vector<long double> x(n), y(n);
    for(int i = 0; i < n; i++) {
        cin >> x[i] >> y[i];
    }
    long double ans = LLONG_MAX;
    if(n == 2) {
        cout << fixed << setprecision(20)
             << sqrtl((x[1] - x[0]) * (x[1] - x[0]) +
                      (y[1] - y[0]) * (y[1] - y[0])) /
                    2.0
             << endl;
    } else {
        //異なる3点を通る場合
        for(int i = 0; i < n - 2; i++) {
            for(int j = i + 1; j < n - 1; j++) {
                for(int k = j + 1; k < n; k++) {
                    auto tmp =
                        calcCircleOf2Point(x[i], y[i], x[j], y[j], x[k], y[k]);
                    if(tmp.empty()) {
                        continue;
                    }
                    bool flag = true;
                    for(int p = 0; p < n; p++) {
                        if(dist(x[p], tmp[0], y[p], tmp[1]) >
                           tmp.back() + eps) {
                            flag = false;
                            break;
                        }
                    }
                    if(flag) {
                        ans = min(ans, tmp.back());
                    }
                }
            }
        }
        // 異なる2点のみ通る場合
        for(int i = 0; i < n - 2; i++) {
            for(int j = i + 1; j < n - 1; j++) {
                long double r = dist(x[i], x[j], y[i], y[j]) / 2.0;
                long double mx = (x[i] + x[j]) / 2.0;
                long double my = (y[i] + y[j]) / 2.0;
                bool flag2 = true;
                for(int p = 0; p < n; p++) {
                    if(dist(x[p], mx, y[p], my) > r + eps) {
                        flag2 = false;
                        break;
                    }
                }
                if(flag2) {
                    ans = min(ans, r);
                }
            }
        }
        cout << fixed << setprecision(20) << ans << endl;
    }
}


Measured memory_bytes: 256