#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> P;
typedef pair<int,int> Pi;
#define rep(i, n) for (ll i = 0; i < n; i++)
#define FOR(i, a, b) for (ll i = a; i < b; i++)
#define fi first
#define se second

template<class T>
inline bool chmax(T &a, T b) {
    if(a < b) {
        a = b;
        return true;
    }
    return false;
}
template<class T>
inline bool chmin(T &a, T b) {
    if(a > b) {
        a = b;
        return true;
    }
    return false;
}
template<typename T> ostream& operator<<(ostream& s,const complex<T>& d) {return s<<"("<<d.real()<<", "<<d.imag()<< ")";}
template<typename T1, typename T2> ostream& operator<<(ostream& s,const pair<T1,T2>& d) {return s<<"("<<d.first<<", "<<d.second<<")";}
template<typename T> ostream& operator<<(ostream& s, const vector<T>& d){
	int len=d.size();
	rep(i,len){
		s<<d[i];if(i<len-1) s<<" ";
	}
	return s;
}
template<typename T> ostream& operator<<(ostream& s,const vector<vector<T>>& d){
	int len=d.size();
	rep(i,len){
		s<<d[i]<<endl;
	}
	return s;
}
template<typename T> ostream& operator<<(ostream& s,const set<T>& v){
	s<<"{ ";
	for(auto itr=v.begin();itr!=v.end();++itr) {
		if (itr!=v.begin()) {s<< ", ";}
		s<<(*itr);
	}
	s<<" }";
	return s;
}
template<typename T1, typename T2> ostream& operator<<(ostream& s,const map<T1,T2>& m){
	s<<"{"<<endl;
	for(auto itr=m.begin();itr!=m.end();++itr){
		s<<" "<<(*itr).first<<" : "<<(*itr).second<<endl;
	}
	s<<"}"<<endl;
	return s;
}

const ll mod=1e9+7;
const ll inf=1e15;
const int INF=1e9;

namespace cover_2d {
    double eps = 1e-9;
    using Point = complex<double>;
    struct Circle {
        Point p; double r;
    };
    double dist(Point p, Point q) {
        return abs(p - q);
    }
    double area2(Point p, Point q) {
        return (conj(p)*q).imag();
    }
    bool in(const Circle& c, Point p) {
        return dist(c.p, p) < c.r + eps;
    }
    Circle INVAL = Circle{ Point(0, 0), -1 };
    Circle mCC(Point a, Point b, Point c) {
        b -= a; c -= a;
        double d = 2 * (conj(b)*c).imag(); if(abs(d) < eps) return INVAL;
        Point ans = (c*norm(b) - b * norm(c)) * Point(0, -1) / d;
        return Circle{ a + ans, abs(ans) };
    }
    Circle solve(vector<Point> p) {
        mt19937 gen(0x94949); shuffle(p.begin(), p.end(), gen);
        Circle c = INVAL;
        for(int i = 0; i < p.size(); ++i) if(c.r < 0 || !in(c, p[i])) {
            c = Circle{ p[i], 0 };
            for(int j = 0; j <= i; ++j) if(!in(c, p[j])) {
                Circle ans{ (p[i] + p[j])*0.5, dist(p[i], p[j])*0.5 };
                if(c.r == 0) {
                    c = ans; continue;
                }
                Circle l, r; l = r = INVAL;
                Point pq = p[j] - p[i];
                for(int k = 0; k <= j; ++k) if(!in(ans, p[k])) {
                    double a2 = area2(pq, p[k] - p[i]);
                    Circle c = mCC(p[i], p[j], p[k]);
                    if(c.r < 0) continue;
                    else if(a2 > 0 && (l.r<0 || area2(pq, c.p - p[i]) > area2(pq, l.p - p[i]))) l = c;
                    else if(a2 < 0 && (r.r < 0 || area2(pq, c.p - p[i]) < area2(pq, r.p - p[i]))) r = c;
                }
                if(l.r < 0 && r.r < 0) c = ans;
                else if(l.r < 0) c = r;
                else if(r.r < 0) c = l;
                else c = l.r <= r.r ? l : r;
            }
        }
        return c;
    }
};

int main(){
	cin.tie(0);
	ios::sync_with_stdio(false);
	int n;
	cin>>n;
	vector<complex<double>> v;
	rep(i,n){
		double x,y;
		cin>>x>>y;
		v.push_back({x,y});
	}
	auto c=cover_2d::solve(v);
	cout<<setprecision(10)<<c.r<<endl;
}

Measured memory_bytes: 256