import Foundation
// 第一引数には順列を生成したい配列を渡す
// 第二引数には順列を生成したい配列のサイズを渡す
func permutations(L:[[Int]],L_cnt:Int)->[[[Int]]]{
    // もしLが空なら[[]]を返す
    if L == []{
        return [[[]]]
    }
    // もしLのサイズが1なら[L]を返す
    else if L_cnt == 1{
        return [L]
    }
    //Lのサイズが2以上の時の処理
    else{
        //戻り値となる二次元配列を初期化
        var result:[[[Int]]] = []
        // Lの要素についてループを回す 
        for i in 0..<L_cnt{
            // 再帰
            for var x in permutations(L:Array(L[0..<i]+L[i+1..<L_cnt]),L_cnt:L_cnt-1){
                // 得られた二次元配列の要素である配列にL[i]を追加
                x.append(L[i])
                // 新しくできた順列をresultに追加
                result.append(x)
            }
        }
        // 生成した順列を返す
        return result
    }
}

// 2乗する関数
func pow2(n:Int)->Int{
    return n*n
}

// 標準入力からnを受け取る
let n = Int(readLine()!)!

// 標準入力からx,yを受け取る
// x,yを持っておく配列mを用意
var m:[[Int]] = []
for _ in 0..<n{

    // mに入力値を入れていく
    let xy = readLine()!.split(separator:" ").map{Int($0)!}
    m.append(xy)
}

// 順列の生成
var check = permutations(L:m,L_cnt:n)

// 答えを入れる変数を用意
var ans:Double = 0.0

// 順列全探索
for i in check{

    // iの要素について全探索
    for j in 0..<n-1{
    
        // i[j]とi[j+1]の距離をansに追加
        ans += sqrt(Double( pow2(n:i[j][0] - i[j+1][0]) + pow2(n:i[j][1] - i[j+1][1])))
    }
}

// n!で割って平均をとる
for i in 1...n{
    ans/=Double(i)
}

// ansの出力
print(ans)