// ConsoleApplication1.cpp : このファイルには 'main' 関数が含まれています。プログラム実行の開始と終了がそこで行われます。
//
#define rep(i, m, n) for(int i = m; i < (n); i++)
#define print(x) std::cout << (x) << std::endl;
#define printa(x,n) for(int i = 0; i < n; i++){ std::cout << (x[i]) << " ";} std::cout << std::endl;
#define printa2(x,m,n) for(int i = 0; i < m; i++){ for(int j = 0; j < n; j++){ std::cout << x[i][j] << " ";} std::cout << std::endl;}
#define printp(x,n) for(int i = 0; i < n; i++){ std::cout << "(" << x[i].first << ", " << x[i].second << ") "; } std::cout << std::endl;
#define INF (1e18)
#define ll long long
// C
#ifndef _GLIBCXX_NO_ASSERT
#include <cassert>
#endif
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>

#if __cplusplus >= 201103L
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cwchar>
#include <cwctype>
#endif

// C++
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>

#if __cplusplus >= 201103L
#include <array>
#include <atomic>
#include <chrono>
#include <condition_variable>
#include <forward_list>
#include <future>
#include <initializer_list>
#include <mutex>
#include <random>
#include <ratio>
#include <regex>
#include <scoped_allocator>
#include <system_error>
#include <thread>
#include <tuple>
#include <typeindex>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#endif
#define __max(a,b) (((a) > (b)) ? (a) : (b))
#define __min(a,b) (((a) < (b)) ? (a) : (b))
class Plot {
public :
	int64_t x = 0;
	int64_t y = 0;
	Plot() :Plot(0, 0) {}
	Plot(int64_t x, int64_t y) {
		this->x = x;
		this->y = y;
	}
};

double Distance(int x1, int y1, int x2, int y2) {
	return sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
}

//階乗 
int fact(int k) {
	int sum = 1;
	for (int i = 1; i <= k; ++i)
	{
		sum *= i;
	}
	return sum;
}

int main()
{
	std::cin.tie(0);
	
	//入力受け取り
	int64_t NumCity = 0;
	std::cin >> NumCity;
	std::vector<Plot> Plots;
	std::vector<std::vector<int>> routes;

	int tmpx, tmpy;
	for (size_t i = 0; i < NumCity; i++)
	{
		std::cin >> tmpx >> tmpy;
		Plots.push_back(Plot(tmpx, tmpy));
	}

	//0, 1, 2, NumCity-1の列を生成（下の準備）
	std::vector<int> v;
	for (size_t i = 0; i < NumCity; i++)
	{
		v.push_back(i);
	}

	//町を通る順列取得
	std::vector<int> tmp(NumCity);
	do {
		tmp.clear();
		for (size_t i = 0; i < NumCity; i++)
		{
			tmp.push_back(v[i]);
		}
		routes.push_back(v);
	} while (std::next_permutation(v.begin(), v.end()));

	//町を通る順列に対しての距離計算
	double distance = .0;
	std::vector<double> Dists;
	for (size_t i = 0; i < routes.size(); i++)
	{
		//各々ルートの距離計算 例：2 0 1
		auto target = routes[i];
		
		for (size_t i = 0; i < NumCity - 1; i++)
		{
			distance += Distance(Plots[target[i]].x, Plots[target[i]].y, Plots[target[i + 1]].x,Plots[target[i + 1]].y);
		}
	}

	std::cout << std::setprecision(20) << (double)distance / (double)routes.size() << std::endl;

	return 0;
}


Measured memory_bytes: 3892