#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define rint register int
#define cross(p1,p2,p3) ((p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y))
#define crossop(p1,p2,p3) sgn(cross(p1,p2,p3))
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f, N = 1e5 + 5;
const double eps = 1e-8, pi = acos(-1.0);
inline int read()
{
    int sum = 0, f = 1;
    char c = getchar();
    while(c>'9'||c<'0') {if(c=='-') f = -f; c = getchar();}
    while(c>='0'&&c<='9') sum = sum*10 + c - 48, c = getchar();
    return sum*f;
}
int sgn(double a) { return a < -eps? -1 : a > eps; }
int cmp(double a,double b) { return sgn(a-b); }
int n;
struct point
{
    double x, y;
    point() {}
    point(double _x,double _y) { x = _x, y = _y;}
    point operator + (point p) { return {x+p.x, y+p.y};}
    point operator - (point p) { return {x-p.x, y-p.y};}
    point operator * (double d) { return {x*d, y*d};}
    point operator / (double d) { return {x/d, y/d};}
    double operator ^ (const point &b) const { return x*b.y - y*b.x;}
    double operator * (const point &b) const { return x*b.x + y*b.y;}
    void input() { scanf("%lf%lf",&x,&y);}
    bool operator < (point p) const
    {
        int c = cmp(x,p.x);
        if(c) return c == -1;
        return cmp(y,p.y) == -1;
    }
    bool operator == (point p) const { return cmp(x,p.x)==0&&cmp(y,p.y)==0;}
    int quad() const { return sgn(y)==1||(sgn(y)==0&&sgn(x)>=0);}
    point rot(double alpha) { return{x*cos(alpha)-y*sin(alpha),x*sin(alpha)+y*cos(alpha)};}
    double alpha() { return atan2(y,x);}
    double dis(point p) { return hypot(x-p.x,y-p.y);}
    double len() { return hypot(x,y);}
    double len2() { return x*x + y*y;}
    point rotleft() { return point(-y,x);}
    point rotright() { return point(y,-x);}
}p[N];
struct line
{
    point s, e;
    line() {}
    line(point _s,point _e) { s = _s, e = _e;}
    bool operator == (line v) { return (s==v.s)&&(e==v.e);}
    double len() { return s.dis(e);}
    bool pointonseg(point p) { return crossop(s,e,p)==0&&crossop(p,s,e)<=0;}
    bool parallel(line v) { return sgn((e-s)^(v.e-v.s))==0;}
    double dispointtoline(point p) { return fabs(cross(s,p,e))/len();}
    point lineprog(point p) { return s + (((e-s)*((e-s)*(p-s)))/(e-s).len2());}
    void input() { s.input(); e.input();}
    point crosspoint(line v)
    {
    	double a1 = cross(v.s,v.e,s), a2 = -cross(v.s,v.e,e);
    	return (s*a2+e*a1)/(a1+a2);
    }
};
struct circle
{
	point p;
	double r; //r^2
	circle(){}
	circle(point _p,double _r) { p = _p, r = _r;}
	circle(double x,double y,double _r) { p = point(x,y), r = _r;}
	circle(point a,point b,point c)
	{
		line u = line((a+b)/2,((a+b)/2)+((b-a).rotright()));
		line v = line((a+c)/2,((a+c)/2)+((c-a).rotright()));
		p = u.crosspoint(v);
		r = (c-p).len2();
	}
}o;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%lf%lf",&p[i].x,&p[i].y);
	random_shuffle(p+1,p+n+1);
	for(int i=1;i<=n;i++)
	{
		if((p[i]-o.p).len2()>o.r)
		{
			o.p = p[i], o.r = 0.0;
			for(int j=1;j<i;j++)
			{
				if((p[j]-o.p).len2()>o.r)
				{
					o.p = (p[i]+p[j])/2, o.r = (p[j]-o.p).len2();
					for(int k=1;k<j;k++)
					{
						if((p[k]-o.p).len2()>o.r) 
						{
							o = circle(p[i],p[j],p[k]);
						}
					}
				}
			}
		}
	}
	printf("%.10f\n",sqrt(o.r));
	return 0;
}

Measured memory_bytes: 256