#define _USE_MATH_DEFINES
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <clocale>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <deque>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <queue>
#include <regex>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

using namespace std;

#define IOS ios::sync_with_stdio(false); cin.tie(0);
#define FOR(i, s, n) for(int i = (s), i##_len=(n); i < i##_len; ++i)
#define FORS(i, s, n) for(int i = (s), i##_len=(n); i <= i##_len; ++i)
#define VFOR(i, s, n) for(int i = (s); i < (n); ++i)
#define VFORS(i, s, n) for(int i = (s); i <= (n); ++i)
#define REP(i, n) FOR(i, 0, n)
#define REPS(i, n) FORS(i, 0, n)
#define VREP(i, n) VFOR(i, 0, n)
#define VREPS(i, n) VFORS(i, 0, n)
#define RFOR(i, s, n) for(int i = (s), i##_len=(n); i >= i##_len; --i)
#define RFORS(i, s, n) for(int i = (s), i##_len=(n); i > i##_len; --i)
#define RREP(i, n) RFOR(i, n, 0)
#define RREPS(i, n) RFORS(i, n, 0)
#define ALL(v) (v).begin(), (v).end()
#define SORT(v) sort(ALL(v))
#define RSORT(v) sort(ALL(v), greater<decltype(v[0])>())
#define SZ(x) ((int)(x).size())
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define MT make_tuple
#define BIT(n) (1LL<<(n))
#define UNIQUE(v) v.erase(unique(ALL(v)), v.end())

using ll = long long;
using ui = unsigned int;
using ull = unsigned long long;
using Pi_i = pair<int, int>;
using VB = vector<bool>;
using VC = vector<char>;
using VD = vector<double>;
using VI = vector<int>;
using VLL = vector<ll>;
using VS = vector<string>;
using VSH = vector<short>;
using VULL = vector<ull>;

const int MOD = 1000000007;
const int INF = 1000000000;
const int NIL = -1;
const double EPS = 1E-10;

template<class T, class S>
bool chmax(T &a, const S &b){
    if(a < b){
        a = b; return true;
    }
    return false;
}
template<class T, class S>
bool chmin(T &a, const S &b){
    if(b < a){
        a = b; return true;
    }
    return false;
}

#define double long double

int main(){
    int N; cin >> N;
    VD x(N), y(N);
    REP(i, N) cin >> x[i] >> y[i];
    cout << fixed << setprecision(20);
    if(N == 2){
        cout << sqrt((x[0]-x[1])*(x[0]-x[1]) + (y[0]-y[1])*(y[0]-y[1])) / 2 << endl;
        return 0;
    }
    double ans = 1e18;
    REP(i, N){
        FOR(j, i+1, N){
            FOR(k, j+1, N){
                vector<pair<double, double>> p(3);
                p[0] = MP(x[i], y[i]);
                p[1] = MP(x[j], y[j]);
                p[2] = MP(x[k], y[k]);
                SORT(p);
                double r, cx, cy;
                if(abs((p[1].first-p[0].first)*(p[2].second-p[1].second) - 
                   (p[2].first-p[1].first)*(p[1].second-p[0].second)) < EPS){
                    r =  sqrt((p[0].first-p[2].first)*(p[0].first-p[2].first) +
                              (p[0].second-p[2].second)*(p[0].second-p[2].second)) / 2;
                    cx = (p[0].first + p[2].first) / 2;
                    cy = (p[0].second + p[2].second) / 2;
                }else{
                    double a = x[i], b = y[i], c = x[j], d = y[j], e = x[k], f = y[k];
                    cy = ((e-a)*(a*a+b*b-c*c-d*d)-(c-a)*(a*a+b*b-e*e-f*f)) /
                        (2*(e-a)*(b-d) - 2*(c-a)*(b-f));
                    if(abs(c-a) > EPS)
                        cx = (2*(b-d)*cy -a*a-b*b+c*c+d*d)/(2*(c-a));
                    else cx = (2*(b-f)*cy -a*a-b*b+e*e+f*f)/(2*(e-a));
                    r = sqrt((cx-a)*(cx-a) + (cy-b)*(cy-b));
                }
               // cout << cx << " " << cy << " " << r << endl;
                bool okay = true;
                REP(t, N){
                    if(r+EPS < sqrt((cx-x[t])*(cx-x[t]) + (cy-y[t])*(cy-y[t]))){
                        okay = false; break;
                    }
                }
                if(okay) chmin(ans, r);
            }
        }
    }
    REP(i, N){
        FOR(j, i+1, N){
            double cx = (x[i] + x[j]) / 2;
            double cy = (y[i] + y[j]) / 2;
            double r =  sqrt((x[i]-cx)*(x[i]-cx)+(y[i]-cy)*(y[i]-cy));
            bool okay = true;
            REP(t, N){
                if(r+EPS < sqrt((cx-x[t])*(cx-x[t]) + (cy-y[t])*(cy-y[t]))){
                    okay = false; break;
                }
            }
            if(okay) chmin(ans, r);
        }
    }
    cout << ans << endl;
    return 0;
}


Measured memory_bytes: 256