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 DBG = false
local function dbgpr(...)
    if DBG then
        io.write("[dbg]")
        print(...)
    end
end

local function factorial(n)
    local a = 1
    for i=1, n do
        a = a * i
    end
    return a
end

-- C
local N = read.n()
local X, Y = {}, {}
for i=1,N do
    X[i], Y[i] = read.nn()
end

local route_num = factorial(N)
local edges_num = N * (N - 1) / 2
local not_use_edges = edges_num - N + 1
local in_use_edges = edges_num - not_use_edges
local prob = in_use_edges / edges_num
local use_count = prob * route_num

dbgpr("N", N, "R", route_num, edges_num, not_use_edges, "U", in_use_edges, prob, "C", use_count)

local sum = 0

for i=1,N do
    for j=1,N do
        if i ~= j then
            local d = math.sqrt((X[i]-X[j])^2 + (Y[i]-Y[j])^2)
            sum = sum + use_count * d
        end
    end
end

print(sum / route_num / 2)
