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: Runtime Error)

from decimal import Decimal

def f(x1, y1, x2, y2, x3, y3):
    d = 2 * ((y1 - y3) * (x1 - x2) - (y1 - y2) * (x1 - x3))
    
    if d==0:
        return (-1, -1, -1), -1
        
    x = Decimal(((y1 - y3) * (y1 ** 2 - y2 ** 2 + x1 ** 2 - x2 ** 2) - (y1 - y2) * (y1 ** 2 - y3 ** 2 + x1 ** 2 - x3 ** 2)) / d)
    cx = ((y1 - y3) * (y1 ** 2 - y2 ** 2 + x1 ** 2 - x2 ** 2) - (y1 - y2) * (y1 ** 2 - y3 ** 2 + x1 ** 2 - x3 ** 2))
    y = Decimal(((x1 - x3) * (x1 ** 2 - x2 ** 2 + y1 ** 2 - y2 ** 2) - (x1 - x2) * (x1 ** 2 - x3 ** 2 + y1 ** 2 - y3 ** 2)) / -d)
    cy = ((x1 - x3) * (x1 ** 2 - x2 ** 2 + y1 ** 2 - y2 ** 2) - (x1 - x2) * (x1 ** 2 - x3 ** 2 + y1 ** 2 - y3 ** 2))
    r = ((x - x1) ** 2 + (y - y1) ** 2)
    #return (x, y, d), r
    return (cx, cy, d), r

def f2(d, cx, cy, xl, yl, radius):
    dist = (cx-d*xl)**2+(cy+d*yl)**2
    return dist>d**2*radius
    #dist = (cx-xl)**2+(cy-yl)**2
    #return dist>radius

n = int(input())
xy = [tuple(map(int, input().split())) for _ in range(n)]
D = 10**18

if n==2:
    x1, y1 = xy[0]
    x2, y2 = xy[1]
    dist = (x1-x2)**2+(y1-y2)**2
    print(Deciaml(dist**0.5/2))
    exit()
    
for i in range(n-2):
    for j in range(i+1, n-1):
        for k in range(j+1, n):
            x1, y1 = xy[i]
            x2, y2 = xy[j]
            x3, y3 = xy[k]
            (cx, cy, d), radius = f(x1, y1, x2, y2, x3, y3)
            
            if radius==-1:
                continue
            #print(cx, cy, radius)
            if radius<D:
                check = False
                
                for l in range(n):
                    if l in [i, j, k]:
                        continue
                    
                    xl, yl = xy[l]
                    
                    if f2(d, cx, cy, xl, yl, radius):
                        check = True
                        
                if not check:
                    D = radius
    
print(float(D)**0.5)