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 (2.4.0) (judge verdict: Accepted)

printn = lambda x: print(x,end='')
inn = lambda : int(input())
inl   = lambda: list(map(int, input().split()))
inm   = lambda:      map(int, input().split())
ins = lambda : input().strip()
DBG = True # and False
BIG = 10**18
R = 10**9 + 7

def ddprint(x):
  if DBG:
    print(x)

import math
def dist(xx,yy,u,v):
    return math.sqrt((xx-u)**2+(yy-v)**2)

def do2(x1,y1,x2,y2):
    return ((x1+x2)/2, (y1+y2)/2, dist(x1,y1,x2,y2)/2)

def do3(x1,y1,x2,y2,x3,y3):
    p = (x2-x1)*(y3-y1)-(x3-x1)*(y2-y1)
    if p==0:
        return (0,0,-1)
    x1s = x1**2
    y1s = y1**2
    x2s = x2**2
    y2s = y2**2
    x3s = x3**2
    y3s = y3**2
    u = ((x2s+y2s-x1s-y1s)*(y3-y1)-(x3s+y3s-x1s-y1s)*(y2-y1))/(2*p)
    v = -((x2s+y2s-x1s-y1s)*(x3-x1)-(x3s+y3s-x1s-y1s)*(x2-x1))/(2*p)
    r = dist(u,v,x1,y1)
    #ddprint(f"f {x1} {y1} {x2} {y2} {x3} {y3} ret {u} {v} {r}")
    return (u,v,r)

eps = 10**(-13)
def fit(u,v,r):
    for i in range(n):
        if dist(x[i],y[i],u,v)>r+eps:
            return False
    return True

n = inn()
x = []
y = []
for i in range(n):
    xx,yy = inm()
    x.append(xx)
    y.append(yy)
mn = 2000.0
for i in range(n-1):
    for j in range(i+1,n):
        u,v,r = do2(x[i],y[i],x[j],y[j])
        if r>0 and fit(u,v,r):
            mn = min(mn,r)
for i in range(n-2):
    for j in range(i+1,n-1):
        for k in range(j+1,n):
            u,v,r = do3(x[i],y[i],x[j],y[j],x[k],y[k])
            if r>0 and fit(u,v,r):
                mn = min(mn,r)
print(mn)