#pragma GCC optimize ("-O3")
#include <bits/stdc++.h>
#include <complex>
#include <queue>
#include <set>
#include <unordered_set>
#include <list>
#include <chrono>
#include <random>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <stack>
#include <iomanip>
#include <fstream>
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> p32;
typedef pair<ll,ll> p64;
typedef pair<double,double> pdd;
typedef vector<ll> v64;
typedef vector<ll> v32;
typedef vector<vector<ll> > vv32;
typedef vector<vector<ll> > vv64;
typedef vector<vector<p64> > vvp64;
typedef vector<p64> vp64;
typedef vector<p32> vp32;
ll MOD = 1e9+7 ;
#define forn(i,e) for(ll i = 0; i < e; i++)
#define forsn(i,s,e) for(ll i = s; i < e; i++)
#define rforn(i,s) for(ll i = s; i >= 0; i--)
#define rforsn(i,s,e) for(ll i = s; i >= e; i--)
#define ln "\n"
#define dbg(x) cout<<#x<<" = "<<x<<ln
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define INF 1e18
#define fast_cin() ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define all(x) (x).begin(), (x).end()
#define sz(x) ((ll)(x).size())
#define vvv64 vector<vv32>
#define vvvv64 vector<vvv32>
 
#define f first
#define s second
typedef ld T;
template <class T> int sgn(T x) { return (x > 0) - (x < 0); }

#include <iostream> 
#include <cfloat> 
using namespace std; 
  
// This pair is used to store the X and Y 
// coordinate of a point respectively 
#define pdd pair<double, double> 
  
// Function to find the line given two points 
void lineFromPoints(pdd P, pdd Q, double &a, 
                        double &b, double &c) 
{ 
    a = Q.second - P.second; 
    b = P.first - Q.first; 
    c = a*(P.first)+ b*(P.second); 
} 
  
// Function which converts the input line to its 
// perpendicular bisector. It also inputs the points 
// whose mid-point lies on the bisector 
void perpendicularBisectorFromLine(pdd P, pdd Q, 
                 double &a, double &b, double &c) 
{ 
    pdd mid_point = make_pair((P.first + Q.first)/2, 
                            (P.second + Q.second)/2); 
  
    // c = -bx + ay 
    c = -b*(mid_point.first) + a*(mid_point.second); 
  
    double temp = a; 
    a = -b; 
    b = temp; 
} 
  
// Returns the intersection point of two lines 
pdd lineLineIntersection(double a1, double b1, double c1, 
                         double a2, double b2, double c2) 
{ 
    double determinant = a1*b2 - a2*b1; 
    if (determinant == 0) 
    { 
        // The lines are parallel. This is simplified 
        // by returning a pair of FLT_MAX 
        return make_pair(FLT_MAX, FLT_MAX); 
    } 
  
    else
    { 
        double x = (b2*c1 - b1*c2)/determinant; 
        double y = (a1*c2 - a2*c1)/determinant; 
        return make_pair(x, y); 
    } 
} 
  
pdd findCircumCenter(pdd P, pdd Q, pdd R) 
{ 
    // Line PQ is represented as ax + by = c 
    double a, b, c; 
    lineFromPoints(P, Q, a, b, c); 
  
    // Line QR is represented as ex + fy = g 
    double e, f, g; 
    lineFromPoints(Q, R, e, f, g); 
  
    // Converting lines PQ and QR to perpendicular 
    // vbisectors. After this, L = ax + by = c 
    // M = ex + fy = g 
    perpendicularBisectorFromLine(P, Q, a, b, c); 
    perpendicularBisectorFromLine(Q, R, e, f, g); 
  
    // The point of intersection of L and M gives 
    // the circumcenter 
    pdd circumcenter = 
           lineLineIntersection(a, b, c, e, f, g); 
  
    if (circumcenter.first == FLT_MAX && 
        circumcenter.second == FLT_MAX) 
    { 
        // cout << "The two perpendicular bisectors "
        //         "found come parallel" << endl; 
        // cout << "Thus, the given points do not form "
        //         "a triangle and are collinear" << endl; 
        return pdd(-1e9,-1);
    } 
  
    else
    { 
        return circumcenter;
        // cout << "The circumcenter of the triangle PQR is: "; 
        // cout << "(" << circumcenter.first << ", "
        //      << circumcenter.second  << ")" << endl; 
    } 
} 
long double epsilon=1e-8;

ld dist(pdd a,pdd b)
{
    ld ans=(a.fi-b.fi)*(a.fi-b.fi)+(a.se-b.se)*(a.se-b.se);
    return sqrt(ans);
}
void solve()
{
    int n;
    cin>>n;
    vector<pdd> arr(n+1);
    for (int i=1; i<=n; i++)
        cin>>arr[i].fi>>arr[i].se;
    ld ans=1e9;
    for (int i=1; i<=n; i++)
    {
        for (int j=i+1; j<=n; j++)
        {
            for (int k=j+1; k<=n; k++)
            {
                pdd center=findCircumCenter(arr[i],arr[j],arr[k]);
                if (abs(center.fi+1e9)<epsilon)
                    continue;
                ld r=dist(center,arr[i]);
                bool f=1;
                for (int l=1; l<=n; l++)
                {
                    long double d=dist(center,arr[l]);
                    if (d>r+epsilon)
                    {
                        f=0;
                    }
                }
                if (f)
                {
                    ans=min(ans,r);
                }
            }
        }
    }
    // cout <<setprecision(20)<<fixed;
    // cout << ans<<endl;

    for (int i=1; i<=n; i++)
    {
        for (int j=i+1; j<=n; j++)
        {
            // pdd center=findCircumCenter(arr[i],arr[j],arr[k]);
            pdd center;
            center.fi=(arr[i].fi+arr[j].fi)/2;
            center.se=(arr[i].se+arr[j].se)/2;
            ld r=dist(center,arr[i]);
            
            // cout <<r <<" "<<center.fi<<endl;
            bool f=1;
            for (int l=1; l<=n; l++)
            {
                long double d=dist(center,arr[l]);
                if (d>r+epsilon)
                {
                    f=0;
                }
            }            
            if (f)
                 ans=min(ans,r);
 
        }
    }
    cout << ans<<endl;

}
 
int main() {
    fast_cin();
    int t=1;
    cout <<setprecision(20)<<fixed;

    // cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}


Measured memory_bytes: 256