#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
double a[65536][16], len = 0, as[16][16];
int n, s = 1;
struct node {
double x, y;
}nmd[16];
void az(int level, int il, double lenl) {
if (level >= n) {
return;
}
for (int i = 1; i <= n; i++) {
if (((1 << i) & s) / pow(2, i) == 1 || i == il) {
continue;
}
if (as[il][i] == 0) {
len += as[i][il];
}
else {
len += as[il][i];
}
s += pow(2, i);
if (len <= a[s][i] || a[s][i] == 0) {
a[s][i] = len;
}
else {
len = lenl;
s -= pow(2, i);
return;
}
az(level + 1, i, len);
s -= pow(2, i);
len = lenl;
}
}
int main()
{
int count;
double sa;
cin >> n;
for (count = 1; count <= n; count++) {
cin >> nmd[count].x >> nmd[count].y;
}
for (int x = 0; x <= n; x++) {
for (int y = x + 1; y <= n; y++) {
as[x][y] = pow(pow(nmd[x].x - nmd[y].x, 2) + pow(nmd[x].y - nmd[y].y, 2), 0.500);
}
}
az(0, 0, 0);
for (count = 0, s = 0; count <= n; count++) {
s += pow(2, count);
}
for (count = 0, sa = 0; count <= n; count++) {
if (a[s][count] < sa || sa == 0) {
sa = a[s][count];
}
}
cout << fixed << setprecision(2) << sa << endl;
}