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 Lua (5.3.2) (judge verdict: Runtime Error)

local read = setmetatable({}, {__index = function(t, k) local a = {} for i=1,#k do table.insert(a, '*'..string.sub(k, i, i)) end local r = io.read local u = table.unpack or unpack return function() return r(u(a)) end end})
read.N = function(N) local t={} for i=1,N do t[i]=read.n() end return t end
string.totable = function(s) local t={} local u=string.sub for i=1,#s do t[i] = u(s, i, i) end return t end
string.split = function(s) local t={} for w in string.gmatch(s, "[^%s]+") do table.insert(t, w) end return (table.unpack or unpack)(t) end
----
local function distance(a, b)
    local d_sq_2 = (b[1] - a[1])^2 + (b[2] - a[2])^2
    return d_sq_2^0.5
end
--assert(math.abs(distance({0,0},{1,1}) - 2^0.5) <= 0.000000000001)
----
local N = read.n()
local P = {}
for i=1,N do
    local x, y = read.nn()
    P[i] = {x, y}
end

local function check(a, b)
    local ox = (a[1] + b[1]) / 2.0
    local oy = (a[2] + b[2]) / 2.0
    local o = {ox, oy}
    local r = distance(a, b) / 2.0
    for i=1,N do
        local distance_from_o = distance(o, P[i])
        --if distance_from_o <= r then
        local d = r - distance_from_o
        if d >= 0 or math.abs(d) <= 10^-6 then
            -- OK
        else
            -- NG
            return false, 10^6
        end
    end
    return true, r
end

local ans = 10^6
for i=1,N-1 do
    for j=i+1,N do
        local ok, r = check(P[i], P[j])
        if ok then
            ans = math.min(ans, r)
        end
    end
end
assert(ans < 1414.22)
print(ans)