Problem:
Score : 600 points

Problem Statement

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}.

Sample Input 1

2
0 0
1 0

Sample Output 1

0.500000000000000000

Both points are contained in the circle centered at (0.5,0) with a radius of 0.5.

Sample Input 2

3
0 0
0 1
1 0

Sample Output 2

0.707106781186497524

Sample Input 3

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

Sample Output 3

6.726812023536805158

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

Solution in PyPy3 (7.3.0) (judge verdict: Wrong Answer)

import sys

def I(): return int(sys.stdin.readline().rstrip())
def LI(): return list(map(int,sys.stdin.readline().rstrip().split()))  #空白あり

N = I()
xy = [tuple(LI()) for i in range(N)]

def f(r):  # 各点を中心とする半径rの円を描いたとき、全ての円の共通部分が存在するか
    a = 0
    b = 1
    for i in range(N-1):
        for j in range(i+1,N):
            x1,y1 = xy[i]
            x2,y2 = xy[j]
            # 2つの円の交点を求める
            if (x1-x2)**2+(y1-y2)**2 > 4 * r**2:  # 円が交わらない
                a = 1
                break
            else:
                h = (r**2-((x2-x1)/2)**2-((y2-y1)/2)**2)**.5
                x3,y3 = (x1+x2)/2 - h*(y2-y1)/(((y2-y1)**2+(x2-x1)**2)**.5),(y1+y2)/2 + h*(x2-x1)/(((y2-y1)**2+(x2-x1)**2)**.5)  # 円の交点1
                x4,y4 = (x1+x2)/2 + h*(y2-y1)/(((y2-y1)**2+(x2-x1)**2)**.5),(y1+y2)/2 - h*(x2-x1)/(((y2-y1)**2+(x2-x1)**2)**.5)  # 円の交点2
            if N == 2:
                b = 0
            for k in range(N):
                if k == i or k == j:  # 誤差が生じる可能性があるので飛ばす
                    continue
                else:
                    x,y = xy[k]
                    if (x-x3)**2 + (y-y3)**2 > r**2 and (x-x4)**2 + (y-y4)**2 > r**2:
                        break
            else:
                b = 0
            # 2円の交点のうち、いずれの点からも距離がr以下の点があれば b=0
    if a == 1 or b == 1:
        return False
    else:
        return True

low = 0
high = 708  # 500 * 2**0.5 より少し大きい

for i in range(35):
    mid = (low + high)/2
    if f(mid):
        high = mid
    else:
        low = mid

print(high)