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 Python (3.4.3) (judge verdict: Wrong Answer)

import math
from itertools import combinations
n = int(input())
xy = [list(map(int,input().split())) for i in range(n)]
ans = 10**18
k = 0
for i,j in combinations(range(n),2):
  a = xy[i][0]
  b = xy[i][1]
  c = xy[j][0]
  d = xy[j][1]
  dist = math.hypot(a-c,b-d)
  center = ((a+c)/2,(b+d)/2)
  for x,y in xy:
    if math.hypot(x-center[0],y-center[1])*2>dist:
      e = x
      f = y
      aa = a * a
      bb = b * b
      cc = c * c
      dd = d * d
      ee = e * e
      ff = f * f
      if (2 * (e - a)*(b - d) - 2 * (c - a) * (b - f)) == 0:
        ymax = max(b,d,f)
        ymin = min(b,d,f)
        xmax = max(a,c,e)
        xmin = min(a,c,e)
        (px,py) = ((xmax-xmin)/2,(ymax-ymin)/2)
        r = math.hypot(xmax-xmin,ymax-ymin)/2
      else:
        py = ((e - a) * (aa + bb - cc - dd) - (c - a) * (aa + bb - ee- ff)) / (2 * (e - a)*(b - d) - 2 * (c - a) * (b - f))
        px = (2 * (b - f) * py - aa - bb + ee + ff) / (2 * (e - a)) \
          if (c == a) else (2 * (b - d) * py - aa - bb + cc + dd) / (2 * (c - a))
        r = math.hypot(px - a, py - b)
      if k < r:
        r = k
      for z,w in xy:
        if (math.hypot(z-px,w-py)-r)>10**-12:
          break
      else:
        if k<ans:
          ans = k
    else:
      continue
    break
  else:
    ans = dist/2
    break
print(ans)