/*
    Author:zeke
    
    pass System Test!
    GET AC!!
*/
#include <iostream>
#include <queue>
#include <vector>
#include <iostream>
#include <vector>
#include <string>
#include <cassert>
#include <algorithm>
#include <functional>
#include <cmath>
#include <queue>
#include <set>
#include <stack>
#include <deque>
#include <map>
#include <iomanip>
#include <utility>
#include <stack>
#include <bitset>
using ll = long long;
using ld = long double;
using namespace std;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define all(x) (x).begin(), (x).end()
#define rep3(var, min, max) for (ll(var) = (min); (var) < (max); ++(var))
#define repi3(var, min, max) for (ll(var) = (max)-1; (var) + 1 > (min); --(var))
#define Mp(a, b) make_pair((a), (b))
#define F first
#define S second
#define Icin(s) \
    ll(s);      \
    cin >> (s);
#define Scin(s) \
    ll(s);      \
    cin >> (s);
template <class T>
bool chmax(T &a, const T &b)
{
    if (a < b)
    {
        a = b;
        return 1;
    }
    return 0;
}
template <class T>
bool chmin(T &a, const T &b)
{
    if (b < a)
    {
        a = b;
        return 1;
    }
    return 0;
}
typedef pair<ll, ll> P;
typedef vector<ll> V;
typedef vector<V> VV;
typedef vector<P> VP;
ll mod = 1e9 + 7;
ll MOD = 1e9 + 7;
ll INF = 1e18;
#define eps 0.00001
// 0.0か?
#define EQ0(x) ((-eps <= (x)) && ((x) <= eps))
// 同一か？
#define EQ(a, b) (EQ0((a) - (b)))

// 直線の垂直二等分線算出
void CalcPerpLineSeg(double sx, double sy, double ex, double ey, double &a, double &b)
{
    // 線の傾き
    double a1 = (sy - ey) / (sx - ex);

    // 垂直二等分線の傾き
    if (EQ0(a1))
    {
        a = 1.0;
    }
    else
    {
        a = -1.0 / a1;
    }
    // 線の中点
    double cx(sx + (ex - sx) / 2.0);
    double cy(sy + (ey - sy) / 2.0);
    // 求める切片
    if (EQ0(a1))
    {
        b = 0;
    }
    else
    {
        b = cy - a * cx;
    }
}

bool CircleBy3Point(double x1, double y1, double x2, double y2, double x3, double y3,
                    double &cx, double &cy, double &dRad)
{
    // もし3点の中で同じ点が存在すれば、エラーとして返す
    if ((EQ(x1, x2) && EQ(y1, y2)) || (EQ(x2, x3) && EQ(y2, y3)) || (EQ(x3, x1) && EQ(y3, y1)))
    {
        return false;
    }
    // == 中心を算出 ==
    // 与えられた二点の垂直二等分線を算出
    double a, b, c, d;
    CalcPerpLineSeg(x1, y1, x2, y2, a, b);
    CalcPerpLineSeg(x2, y2, x3, y3, c, d);

    // もし3点が直線上の点なら、円にはならない
    if (EQ0(a - c))
    {
        return false;
    }
    // 中心を算出
    cx = (d - b) / (a - c);
    cy = a * cx + b;
    // 半径を算出
    dRad = sqrt(pow(cx - x1, 2.0) + pow(cy - y1, 2.0));

    return true;
}
int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    ll n;
    cin >> n;
    vector<pair<ld, ld>> vec(n);
    rep(i, n)
    {
        ld x, y;
        cin >> x >> y;
        vec[i] = {x, y};
    }
    if (n == 2)
    {
        cout << setprecision(20) << sqrt(pow(vec[0].F - vec[1].F, 2) + pow(vec[0].S - vec[1].S, 2)) / 2.0 << endl;
        return 0;
    }
    ld res = 1e18;
  //  vector<ld> R;
    rep(i, n)
    {
        rep3(j, i + 1, n)
        {
            rep3(k, j + 1, n)
            {
                double centx;
                double centy;
                double dist;
                CircleBy3Point(vec[i].F, vec[i].S, vec[j].F, vec[j].S, vec[k].F, vec[k].S, centx, centy, dist);
                bool h = true;
                //  cout<<dist<<endl;
               // R.push_back(dist);
                rep(l, n)
                {
                    ld r = pow((centx - vec[l].F), 2) + pow((centy - vec[l].S), 2);
                    r = sqrt(r);
                    if (r > dist+eps)
                    {
                        h = false;
                        break;
                    }
                }
                if (h)
                {
                    chmin(res, (ld)dist);
                }
            }
        }
    }
    rep(i,n){
        rep3(j,i+1,n){
            double centx=(vec[i].F+vec[j].F)/2;
            double centy=(vec[i].S + vec[j].S) / 2;
            double dist = sqrt(pow(vec[i].F - vec[j].F, 2) + pow(vec[i].S - vec[j].S, 2)) / 2.0;
            bool h = true;
            //  cout<<dist<<endl;
           // R.push_back(dist);
            rep(l, n)
            {
                ld r = pow((centx - vec[l].F), 2) + pow((centy - vec[l].S), 2);
                r = sqrt(r);
                if (r > dist+eps)
                {
                    h = false;
                    break;
                }
            }
            if (h)
            {
                chmin(res, (ld)dist);
            }
        }
    }
 //   sort(all(R));
   // rep(i, R.size()) cout << setprecision(20)<< R[i] << endl;
    cout << setprecision(20) << res << endl;
}


Measured memory_bytes: 256