#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cmath>
using namespace std;
double min(double a, double b)
{
return a < b ? a : b;
}
int main()
{
int n;
scanf("%d", &n);
double* arx = new double[n + 1];
double* ary = new double[n + 1];
double dis[16][16] = {0};
for (int i = 1; i <= n; i++) { scanf("%lf%lf", &arx[i], &ary[i]); }
arx[0] = ary[0] = 0;
for (int i = 0; i <= n; i++)
{
for (int j = 0; j <= n; j++)
{
dis[i][j] = sqrt((arx[j] - arx[i]) * (arx[j] - arx[i]) + (ary[j] - ary[i]) * (ary[j] - ary[i]));
}
}
int condition = (1 << n) - 1;
double(*dp)[16] = new double[condition + 1][16];
dp[0][0] = 0;
for (int i = 0; i <= condition; i++)
{
for (int j = 1; j <= n; j++) dp[j][i] = 0x7fffffff;
}
for (int i = 1; i <= n; i++) dp[i][1 << (i - 1)] = dis[0][i];
for (int i = 1; i <= condition; i++)
{
for (int j = 1; j <= n; j++)
{
if (((1 << (j - 1)) & i) == 0) continue;
for (int k = 1; k <= n; k++)
{
if (j == k || ((1 << (k - 1)) & i) == 0) continue;
dp[j][i] = min(dp[j][i], dp[k][i - (1 << (j - 1))] + dis[k][j]);
}
}
}
double ans = 0x7fffffff;
for (int i = 1; i <= n; i++) ans = min(ans, dp[i][condition]);
printf("%.2lf", ans);
return 0;
}