#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <set>
#include <map>
#include <vector>
#include <string>

using namespace std;

#define LL long long

#define eps 1e-8
#define eeps 1e-10
#define inf 1e8

const int dx[4] = {1, -1, 0, 0};
const int dy[4] = {0, 0, 1, -1};

int n;
double *x, *y;

double sqr(double x) {
	return x * x;
}

double xj(double x1, double y1, double x2, double y2) {
	return x1 * y2 - x2 * y1;
}
double dis(double x1, double y1, double x2, double y2) {
	return sqrt(sqr(x2 - x1) + sqr(y2 - y1));
}

double get_r(double x1, double y1, double x2, double y2, double x3, double y3, double &xc, double &yc) {
	/*printf("x1 = %lf, y1 = %lf\n", x1, y1);
	printf("x2 = %lf, y2 = %lf\n", x2, y2);
	printf("x3 = %lf, y3 = %lf\n", x3, y3);*/
	double dx12 = x2 - x1, dy12 = y2 - y1;
	double dx13 = x3 - x1, dy13 = y3 - y1;
	double xxj = xj(dx12, dy12, dx13, dy13);
	if (fabs(xxj) < eps) {
		double dis12 = dis(x1, y1, x2, y2);
		double dis13 = dis(x1, y1, x3, y3);
		double dis23 = dis(x2, y2, x3, y3);
		double r = 0;
		r = max(r, dis12);
		r = max(r, dis13);
		r = max(r, dis23);
		return 0.5 * r;
	}
	//printf("xj = %.10lf\n", xxj);
	double cx12 = 0.5 * (x1 + x2), cy12 = 0.5 * (y1 + y2);
	double vx12 = dy12, vy12 = -dx12;
	double vl = sqrt(sqr(vx12) + sqr(vy12));
	vx12 /= vl; vy12 /= vl; // (vx, vy) = 1
	//printf("vx12 = %lf, vy12 = %lf\n", vx12, vy12);
	//printf("cx12 = %lf, cy12 = %lf\n", cx12, cy12);
	double l = -10, r = 10;
	double xl = cx12 + vx12 * l, yl = cy12 + vy12 * l;
	double xr = cx12 + vx12 * r, yr = cy12 + vy12 * r;
	double direct = 1.0;

	double rr = 0.5 * dis(x1, y1, x2, y2);
	double r0 = dis(cx12, cy12, x3, y3);
	double dl = dis(x3, y3, xl, yl), dr = dis(x3, y3, xr, yr);
	if ((dl - dr) * (r0 - rr) < -eps) {
		direct = -1.0;
	}

	l = 0.0; r = 2000.0;
	/*printf("l = (%lf, %lf), r = (%lf, %lf)\n", xl, yl, xr, yr);
	printf("dl = %lf, dr = %lf\n", dl, dr);
	printf("rr = %lf, r0 = %lf\n", rr, r0);
	printf("direct = %lf\n", direct);*/
	/*if (dis(x3, y3, xl, yl) > dis(x3, y3, xr, yr)) {
		swap(l, r); swap(xl, xr); swap(yl, yr);
	}*/
	double mid = 0.5 * (l + r);
	double xm, ym, dd, d0;
	while (fabs(l - r) > eeps) {
		xm = cx12 + vx12 * mid * direct; ym = cy12 + vy12 * mid * direct;
		d0 = dis(x3, y3, xm, ym);
		dd = dis(x1, y1, xm, ym);
		//printf("dd = %.10lf, d0 = %.10lf\n", dd, d0);
		if ((d0 - dd) * (r0 - rr) > 0) {
			l = mid;
		}
		else {
			r = mid;
		}
		mid = (l + r) * 0.5;
		//printf("l = %.14lf, r = %.14lf\n", l, r);
	}
	xc = xm; yc = ym;

	return d0;
}

double get_rr(double x1, double y1, double x2, double y2) {
	double xm = (x1 + x2) * 0.5, ym = (y1 + y2) * 0.5;
	double r = dis(x1, y1, xm, ym);
	for (int i = 0; i < n; ++i) {
		if (dis(x[i], y[i], xm, ym) > r + eps) {
			return inf;
		}
	}
	return r;
}


int main() {
	cin >> n;
	x = new double[n];
	y = new double[n];
	for (int i = 0; i < n; ++i) {
		cin >> x[i] >> y[i];
	}
	if (n == 2) {
		printf("%.12lf\n", dis(x[0], y[0], x[1], y[1]) * 0.5);
		return 0;
	}

	double res = inf;
	double xc, yc, rr;
	for (int i = 0; i < n; ++i) {
		for (int j = i + 1; j < n; ++j) {
			double r0 = get_rr(x[i], y[i], x[j], y[j]);
			res = min(r0, res);
			for (int k = j + 1; k < n; ++k) {
				rr = get_r(x[i], y[i], x[j], y[j], x[k], y[k], xc, yc);
				bool flag = true;
				//printf("xc = %lf, yc = %lf, r = %lf\n", xc, yc, rr);
				for (int l = 0; l < n; ++l) {
					if (dis(x[l], y[l], xc, yc) > rr + eps) {
						flag = false;
					}
				}
				if (flag) {
					res = min(res, rr);
				}
			}
		}
	}
	printf("%.12lf\n", res);
	return 0;
}

Measured memory_bytes: 256