Problem: 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

Solution (in PYTHON3):

Solution:
def ternary_search(*, l, r, func, loop_count=100, find_local_minimum: bool = True):
    """
    三分探索とは「たかだか一つしか極値のない関数fにおける極値を探索するアルゴリズム」
    https://qiita.com/ganariya/items/1553ff2bf8d6d7789127
    loop_count: 70-80で十分.厳密には2/3の冪乗で収束するか計算.epsで条件判定は無限ループが怖い.
    """

    if find_local_minimum:  # 極小値
        for i in range(loop_count):
            c1 = (l * 2 + r) / 3  # lr間を3等分した内分点
            c2 = (l + r * 2) / 3  # lr間を3等分した内分点
            if func(c1) > func(c2):
                l = c1  # 大きい方を(中央に)近づける
            else:
                r = c2
        return func(l)

    else:  # 極大値
        for i in range(loop_count):
            c1 = (l * 2 + r) / 3  # lr間を3等分した内分点
            c2 = (l + r * 2) / 3  # lr間を3等分した内分点
            if func(c1) < func(c2):
                l = c1  # 小さい方を(中央に)近づける
            else:
                r = c2
        return func(l)


def main():
    from collections import namedtuple
    from math import hypot
    import sys
    input = sys.stdin.readline

    MX = 1000

    Pt = namedtuple('Pt', 'x y')

    N = int(input())
    ps = [Pt(*map(int, input().split())) for _ in range(N)]

    def max_dist(x, y):
        return max(hypot(x - p.x, y - p.y) for p in ps)

    def f(x):
        return ternary_search(
            l=0,
            r=MX + 1,
            func=lambda y: max_dist(x, y)
        )  # y[l,r),func=x,yを固定

    res = ternary_search(
        l=0,
        r=MX + 1,
        func=f
    )  # x[l,r),func=xを固定

    print(res)


if __name__ == '__main__':
    main()