#include<bits/stdc++.h>
using namespace std;
int n;
double f[1<<15][30],ans;
struct node{
double x,y;
}a[30];
double dis(node aa,node b){
return sqrt((aa.x-b.x)*(aa.x-b.x)+(aa.y-b.y)*(aa.y-b.y));
}
void init(){
ans=0x7f;
memset(f,0x7f,sizeof(f));
}
signed main(){
//freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
init();
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&a[i].x,&a[i].y);
f[1<<(i-1)][i]=dis((node){0,0},a[i]);
//cout<<(1<<(i-1))<<' '<<i<<' '<<f[1<<(i-1)][i]<<endl;
}
for(int i=1;i<(1<<n);i++){
for(int j=1;j<=n;j++){
if(((i>>(j-1))&1)==0) continue;
for(int k=1;k<=n;k++){
if(k==j) continue;
if(((i>>(k-1))&1)==0) continue;
f[i][j]=min(f[i][j],f[i-(1<<(j-1))][k]+dis(a[j],a[k]));
}
}
}
for(int i=1;i<=n;i++) ans=min(ans,f[(1<<n)-1][i]);
printf("%.2lf",ans);
}