#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<climits>
using namespace std;
const int N = 2e2 , M = (1<<15) + 10;
double x[N],y[N];
int n;
bool vis[N];
double f[M][N];
double ans = INT_MAX;
double dis(int x1,int x2)
{
sqrt(((x[x1]-x[x2]) * (x[x1]-x[x2])) + ((y[x1]-y[x2]) * (y[x1]-y[x2])));
}
void dfs(int k,int now,double s,int t_base)
{
if(k==n)
{
if(ans>s)
ans = s;
return;
}
for(int i=1;i<=n;i++)
{
if(vis[i]) continue;
int mark = t_base + (1<<(i-1));
if(f[mark][i]!=0 && f[mark][i] <= s + dis(now,i)) continue;
vis[i]=1;
f[mark][i] = s+dis(now,i);
dfs(k+1,i,f[mark][i],mark);
vis[i] = 0;
}
return ;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%lf%lf",&x[i],&y[i]);
dfs(0,1,1,0);
printf("%.2lf",ans);
return 0;
}