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<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0; i<(n); i++)
#define FOR(i,a,b) for(int i=(a); i<(b); i++)
#define ALL(v) v.begin(), v.end()
#define RALL(v) v.rbegin(), v.rend()
typedef long long ll;
typedef double D;
struct P { D x, y; };

int main(){
    int n; cin >> n;
    vector<P> p(n);
    rep(i, n) cin >> p[i].x >> p[i].y;

    auto dist = [&](P a, P b){
        return sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y));
    };

    auto f1 = [&](D x, D y){
        D res = 0;
        rep(i, n) res = max(res, dist(P{x, y}, p[i]));
        return res;
    };

    auto f2 = [&](D x){
        D l = 0, r = 1005;
        rep(i, 100){
            D m1 = (l*2+r)/3;
            D m2 = (l+r*2)/3;
            if(f1(x, m1) > f1(x, m2)) l = m1;
            else r = m2;
        }
        return f1(x, l);
    };

    D l = 0, r = 1005;
    rep(i, 100){
        D m1 = (l*2+r)/3;
        D m2 = (l+r*2)/3;
        if(f2(m1) > f2(m2)) l = m1;
        else r = m2;
    }

    D ans = f2(l);
    printf("%.10f\n", ans);
}
