#include <algorithm>
#include <iostream>
#include <iomanip>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <cmath>
#include <stack>
#include <set>
#include <map>
typedef long long ll;
using namespace std;

const double INF = 1e+50;
const double EPS = 1e-10;

struct Point {
    double x, y;
    Point(double x = 0.0, double y = 0.0) : x(x), y(y) {}

    void print() {
        printf("x = %lf y = %lf\n", x, y);
    }
};

inline Point operator+ (Point p, Point q) { return Point(p.x + q.x, p.y + q.y);}
inline Point operator- (Point p, Point q) { return Point(p.x - q.x, p.y - q.y);}
inline Point operator* (Point p, double d) { return Point(p.x * d, p.y * d);}
inline Point operator* (double d, Point p) { return Point(p.x * d, p.y * d);}
inline Point operator/ (Point p, double d) { return Point(p.x / d, p.y / d);}
inline Point operator- (Point p) { return Point(-p.x, -p.y);}

inline Point center (Point p, Point q) {
    return Point((p.x + q.x) / 2.0, (p.y + q.y) / 2.0);
}

inline double abs (Point p){
    return sqrt(p.x * p.x + p.y * p.y);
}

inline double arg (Point p){
    return atan2(p.y, p.x);
}

//外積の大きさ(平行四辺形の面積)(正負あり)
inline double det (Point p, Point q){
    return p.x * q.y - p.y * q.x;
}

struct Line {
    Point p1, p2;
    Line(Point p1 = Point(0, 0), Point p2 = Point(0, 0)) : p1(p1), p2(p2) {}
    void print(){
        cout << "-----Line-----" << endl;
        p1.print();
        p2.print();
        cout << "--------------" << endl;
    }
};

//交差するかどうか
inline bool cross(Line l, Line m) {
    Point a = l.p1 - l.p2;
    Point b = m.p1 - m.p2;
    double d = det(a, b);
    return abs(d) >= EPS;
}

//事前に交差チェックをすること！
inline Point crossPoint (Line l, Line m) {
    Point ab = l.p2 - l.p1;
    Point ac = m.p1 - l.p1;
    Point cd = m.p2 - m.p1;
    return l.p1 + (ab * (det(ac, cd) / det(ab, cd)));
}

inline Line vertivalbisector (Line l) {
    Point c = center(l.p1, l.p2);
    Point ca = l.p1 - c;
    return Line(c, c + Point(-ca.y, ca.x));
}

int main(){
    int N;
    cin >> N;
    Point p[N];
    for(int i = 0; i < N; i++){
        cin >> p[i].x >> p[i].y;
    }

    double ans = INF;

    //2点を直径とする
    for(int i = 0; i < N; i++){
        for(int j = i + 1; j < N; j++){
            Point c = center(p[i], p[j]);
            double r = abs(p[i] - c);

            bool check = true;
            for(int k = 0; k < N; k++){
                double d = abs(p[k] - c);
                if(r - d < -EPS){
                    check = false;
                    break;
                }
            }

            if(check){
                //cout << i << " " << j << endl;
                ans = min(ans, r);
            }
        }
    }

    //3点を通る
    for(int i = 0; i < N; i++){
        for(int j = i + 1; j < N; j++){
            for(int k = j + 1; k < N; k++){
                Line l = vertivalbisector(Line(p[i], p[j]));
                Line m = vertivalbisector(Line(p[i], p[k]));
                if(cross(l, m)){
                    Point c = crossPoint(l, m);
                    double r = abs(Point(p[i] - c));

                    bool check = true;
                    for(int kk = 0; kk < N; kk++){
                        double d = abs(p[kk] - c);
                        if(r - d < -EPS){
                            check = false;
                            break;
                        }
                    }

                    if(check){
                        ans = min(ans, r);
                    }
                }
            }
        }
    }

    cout << fixed << setprecision(10) << ans << endl;
    return 0;
}

Measured memory_bytes: 256