using System;
using System.Collections.Generic;
using System.Linq;
using static Input;
using NX = System.Int64;


public class Prog
{
    public static void Solve()
    {
        int N = NextInt();

        NextPermutation NP = new NextPermutation();
        var np = NP.Run(N);
        List<Tuple<int, int>> xy = new List<Tuple<int, int>>();
        for (int i = 0; i < N; i++)
        {
            int x = NextInt();
            int y = NextInt();
            xy.Add(new Tuple<int, int>(x, y));
        }
        double ans = 0;
        foreach (var l in np)
        {
            double calc = 0;
            bool first = true;
            Tuple<int, int> bef = new Tuple<int, int>(0, 0); ;
            foreach (var i in l)
            {
                if (first) { bef = xy[i]; first = false; continue; }
                calc += Math.Pow((xy[i].Item1 - bef.Item1), 2);
                calc += Math.Pow((xy[i].Item2 - bef.Item2), 2);
                bef = xy[i];
                ans += Math.Sqrt(calc);
                calc = 0;
            }
        }
        for (int i = 1; i <= N; i++) ans /= i;
        Console.WriteLine(ans);
    }
    public static void Main()
    {
        var sw = new System.IO.StreamWriter(Console.OpenStandardOutput()) { AutoFlush = false };
        Console.SetOut(sw);
        Solve();
        Console.Out.Flush();
        return;
    }

}

public class NextPermutation
{
    public List<List<int>> ret;
    private Queue<List<int>> Q;

    public NextPermutation()
    {
        ret = new List<List<int>>();
        Q = new Queue<List<int>>();
    }

    public List<List<int>> Run(int N)
    {
        for (int i = 0; i < N; i++)
        {
            List<int> box = new List<int>();
            box.Add(i);
            Q.Enqueue(box);
        }
        while (Q.Count() != 0)
        {
            List<int> box = Q.Dequeue();
            if (box.Count() == N) { ret.Add(box); }
            else
            {
                for (int i = 0; i < N; i++)
                {
                    if (!box.Contains(i))
                    {
                        List<int> b = new List<int>(box);
                        b.Add(i);
                        Q.Enqueue(b);
                    }
                }
            }
        }
        return ret;
    }
}

public class Input
{
    public const long MOD = 1000000007;
    public const int INF = 1000000007;
    private static Queue<string> q = new Queue<string>();
    private static void Confirm() { if (q.Count == 0) foreach (var s in Console.ReadLine().Split(' ')) q.Enqueue(s); }
    public static int NextInt() { Confirm(); return int.Parse(q.Dequeue()); }
    public static long NextLong() { Confirm(); return long.Parse(q.Dequeue()); }
    public static string NextString() { Confirm(); return q.Dequeue(); }
    public static double NextDouble() { Confirm(); return double.Parse(q.Dequeue()); }
    public static int[] LineInt() { return Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); }
    public static long[] LineLong() { return Console.ReadLine().Split(' ').Select(long.Parse).ToArray(); }
    public static string[] LineString() { return Console.ReadLine().Split(' ').ToArray(); }
    public static double[] LineDouble() { return Console.ReadLine().Split(' ').Select(double.Parse).ToArray(); }
    public long Abs(long a, long b) => Math.Abs(a - b);
}


Measured memory_bytes: 33144