import std;

auto input()
{
    return readln().chomp();
}

alias sread = () => readln.chomp();
alias aryread(T = long) = () => readln.split.to!(T[]);

void main()
{
    long n;
    scan(n);
    auto xy = new long[][](n);
    // writeln(xy);
    foreach (i; 0 .. n)
    {
        xy[i] = aryread();
    }
    // writeln(xy);
    auto tmp = new long[](n);
    foreach (i; 0 .. n)
    {
        tmp[i] = i + 1;
    }
    long sum_dist_tmp;
    real sum_dist = 0;
    long cnt;
    do
    {
        // writeln(tmp);
        cnt += 1;
        foreach (i; 0 .. (tmp.length) - 1)
        {
            sum_dist_tmp = (xy[tmp[i] - 1][0] - xy[tmp[i + 1] - 1][0]) ^^ 2 + (
                    xy[tmp[i] - 1][1] - xy[tmp[i + 1] - 1][1]) ^^ 2;
            sum_dist += sqrt(cast(real) sum_dist_tmp);
        }
    }
    while (nextPermutation(tmp));
    // writeln(sum_dist);
    // writeln("cnt", cnt);
    writefln("%.10f", sum_dist / cnt);
}

void scan(L...)(ref L A)
{
    auto l = readln.split;
    foreach (i, T; L)
    {
        A[i] = l[i].to!T;
    }
}

auto binary_search(long key, long[] l)
{
    long left = 0; //lの左端
    long right = l.length - 1; //lの右端
    while (right >= left)
    {
        long mid = left + (right - left) / 2; //区間の真ん中
        if (l[mid] == key)
        {
            return mid;
        }
        else if (l[mid] > key)
        {
            right = mid - 1;
        }
        else if (l[mid] < key)
        {
            left = mid + 1;
        }

    }
    return -1;
}

// auto a = [1, 14, 32, 51, 51, 51, 243, 419, 750, 910];
// auto a = aryread();
// writeln(a);
// long len_a = a.length;
// writeln(len_a);
// long ans;
// ans = binary_search(51, a);
// writeln(ans);

