#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 20, M = 1 << N;
double w[N][N], dp[M][N];
struct node {
double x, y;
}e[N];
double dis(node a, node b) {
return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
int main() {
int n;
cin >> n;
n += 1;
for(int i = 1; i < n; i++) {
cin >> e[i].x >> e[i].y;
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
w[i][j] = dis(e[i], e[j]);
}
}
memset(dp, 0x3f, sizeof(dp));
dp[1][0] = 0;
for(int i = 0; i < 1 << n; i++) {
for(int j = 0; j < n; j++) {
if(i >> j & 1) {
for(int k = 0; k < n; k++) {
if(i >> k & 1) {
dp[i][j] = min(dp[i][j], dp[i - (1 << j)][k] + w[k][j]);
}
}
}
}
}
double ans = 0x3f3f3f3f;
for(int i = 1; i < n; i++) {
ans = min(ans, dp[(1 << n) - 1][i]);
}
printf("%.7lf\n", ans);
return 0;
}