Given are N points (x_i, y_i) in a two-dimensional plane.

Find the minimum radius of a circle such that all the points are inside or on it.

Constraints

* 2 \leq N \leq 50
* 0 \leq x_i \leq 1000
* 0 \leq y_i \leq 1000
* The given N points are all different.
* The values in input are all integers.

Input

Input is given from Standard Input in the following format:


N
x_1 y_1
:
x_N y_N


Output

Print the minimum radius of a circle such that all the N points are inside or on it.

Your output will be considered correct if the absolute or relative error from our answer is at most 10^{-6}.

Examples

Input

2
0 0
1 0


Output

0.500000000000000000


Input

3
0 0
0 1
1 0


Output

0.707106781186497524


Input

10
10 9
5 9
2 0
0 0
2 7
3 3
2 5
10 0
3 7
1 9


Output

6.726812023536805158
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>

#define FOR(i, n) for(int (i)=0; (i)<(n); (i)++)

typedef long long ll;

using namespace std;

int N;
ll X[51], Y[51];

double ret;

void get_radius(double x, double y) {
    double r = 0;
    FOR(i, N) r = max(r, hypot(X[i]-x, Y[i]-y));
    ret = min(ret, r);
}

int main() {
    cin >> N;
    FOR(i, N) cin >> X[i] >> Y[i];
    ret = 1e9;

    FOR(z, N) FOR(y, z) {
        double rx = (X[y] + X[z])/2.0;
        double ry = (Y[y] + Y[z])/2.0;
        get_radius(rx, ry);

        FOR(x, y) {
            double a=hypot(X[y]-X[z], Y[y]-Y[z]);
            double b=hypot(X[z]-X[x], Y[z]-Y[x]);
            double c=hypot(X[x]-X[y], Y[x]-Y[y]);

            if(abs(a+b-c)<1e-9) continue;
            if(abs(a+c-b)<1e-9) continue;
            if(abs(c+b-a)<1e-9) continue;

            double rx=(a*a*(b*b+c*c-a*a)*X[x]+b*b*(a*a+c*c-b*b)*X[y]+c*c*(b*b+a*a-c*c)*X[z])/(a*a*(b*b+c*c-a*a)+b*b*(a*a+c*c-b*b)+c*c*(b*b+a*a-c*c));
			double ry=(a*a*(b*b+c*c-a*a)*Y[x]+b*b*(a*a+c*c-b*b)*Y[y]+c*c*(b*b+a*a-c*c)*Y[z])/(a*a*(b*b+c*c-a*a)+b*b*(a*a+c*c-b*b)+c*c*(b*b+a*a-c*c));
            get_radius(rx, ry);
        }
    }
    printf("%.12lf\n", ret);
}
