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 Ruby (2.3.3) (judge verdict: Runtime Error)

lines = []
while line = gets
    lines << line.chomp.split(' ').map(&:to_i)
end

N =lines[0][0]
x = []
y = []
for i in 1..N do
  x.push(lines[i][0])
  y.push(lines[i][1])
end

def dist(i,j,x,y)
  return ((x[j-1] - x[i-1]) ** 2 + (y[j-1] - y[i-1]) ** 2) ** 0.5
end

def straight?(ij,jk,ki)
  a = (ij + jk == ki)
  b = (jk + ki == ij)
  c = (ki + ij == jk)
  return (a or b or c)
end

def max(x,y,z)
  if x < y then
    if y < z then
      return z
    else
      return y
    end
  else
    if x < z then
      return z
    else
      return x
    end
  end
end

def radius(i,j,k,x,y)
  ij = dist(i,j,x,y)
  jk = dist(j,k,x,y)
  ki = dist(k,i,x,y)
  cos_i = (ij ** 2 + ki ** 2 - jk ** 2) / (2 * ij * ki)
  sin_i = (1 - cos_i ** 2) ** 0.5
  if straight?(ij,jk,ki) then
    return max(ij,jk,ki) / 2
  else
    return jk / (2 * sin_i)
  end
end
  
if N == 2 then
  print dist(1,2,x,y)
else
  max_radius = 0
  for i in 1..(N-2) do
    for j in (i+1)..(N-1) do
      for k in (j+1)..N do
        new_radius = radius(i,j,k,x,y)
        if max_radius < new_radius then
          max_radius = new_radius
        end
      end
    end
  end
  print new_radius
end