/**
 * Created by Wangzhe on 2020/1/12 20:40.
 * Description: 
 **/


#include <bits/stdc++.h>
#include <stdio.h>
#include <math.h>

using namespace std;

#define ll long long
#define ull unsigned long long
#define PI acos(-1.0)
#define eps 1e-12
#define fi first
#define se second
#define MEM(a, b) memset((a),(b),sizeof(a))
#define mod(x) ((x)%MOD)
#define pii pair<int,int>
#define wz cout<<"-----"<<endl;

const int INF_INT = 2147483647;
const ll INF_LL = 9223372036854775807LL;
const ull INF_ULL = 18446744073709551615Ull;
const ll P = 92540646808111039LL;

const ll maxn = 1e5 + 10, MOD = 1e9 + 7;


// 输入最多的点数目
#define MAX_POINTS_AMOUNT 100
struct Point
{
    double x,y;
};
// 求点 p1, p2 的距离
double distance(struct Point p1, struct Point p2)
{
    return sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y));
}
// 求 a, b, c 中的最大值
double max(double a, double b, double c)
{
    return a>=b && a>=c
           ? a
           : b>=a && b>=c
             ? b
             : c;
}
// 判断长度为 a, b, c 的 3条线段能否组成三角形
// 判断依据为：至少有一条边的长度，大于另两条边的长度差（绝对值），小于另两条边的长度和
int canMakeTriangle(double a, double b, double c)
{
    return a>fabs(b-c) && a<(b+c) ||
           b>fabs(a-c) && b<(a+c) ||
           c>fabs(a-b) && c<(a+b);
}
// 判断长度为 a, b, c 的 3条线段能否组成锐角三角形
// 判断依据：根据余弦定理，求出 3 个角的余弦值
int canMakeAcuteTriangle(double a, double b, double c)
{
    unsigned int i;
    double cos_a, cos_b ,cos_c;
    if(canMakeTriangle(a, b, c))
    {
        cos_a = (b*b + c*c - a*a)/(2*b*c);
        cos_b = (a*a + c*c - b*b)/(2*a*c);
        cos_c = (a*a + b*b - c*c)/(2*a*b);
        return cos_a>0 && cos_b>0 && cos_c>0;
    }
    return 0;
}

double minCircleRadius(unsigned int n, struct Point points[],
                       unsigned int start, unsigned int selectPointsAmount, struct Point selectPoints[])
{
    if(n <= 1)
        return 0.0;
    if(n == 2)
        return distance(points[0], points[1])/2.0;
    else
    {
        if(selectPointsAmount == 3)
        {// 已经选好了 3 个点，求能覆盖它们的最小圆的半径
            double L1 = distance(selectPoints[0], selectPoints[1]);
            double L2 = distance(selectPoints[0], selectPoints[2]);
            double L3 = distance(selectPoints[1], selectPoints[2]);
            double L = (L1 + L2 + L3)/2.0;
            double S = sqrt(L*(L-L1)*(L-L2)*(L-L3));
            if(canMakeAcuteTriangle(L1, L2, L3))
            {// 能组成锐角三角形
                return L1*L2*L3/(4.0*S);
            }
            else
            {// 其他情况：三点共线，组成直角三角形，或锐角三角形
                return max(L1, L2,L3)/2.0;
            }
        }
        else
        {// 任选 3 个点
            double r, minR = 0.0;
            unsigned int i;
            struct Point temp[3];
            if(selectPoints == NULL)
                selectPoints = temp;
            for(i=start;(n-i)>=(3-selectPointsAmount);i++)
            {
                selectPoints[selectPointsAmount] = points[i];
                r = minCircleRadius(n, points, i+1, selectPointsAmount+1, selectPoints);
                if(minR < r)
                    minR = r;
            }
            return minR;
        }
    }
}


void init() {

}
struct Point points[55];

void solve() {
    int n; cin >> n;
    for(int i=0; i<n; i++)
        cin >> points[i].x >> points[i].y;
    printf("%.18f\n",minCircleRadius(n, points, 0, 0, NULL));
}


int main() {
    init();
    solve();
    return 0;
}





Measured memory_bytes: 256