记录
#include<bits/stdc++.h>
using namespace std;
struct p{
double x,y;
bool visit;
int num;
}ps[16];
int n;
double ans=10000000,f[16][33000]={0};
double dis(p p1,p p2){
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
void dfs(p ppp,int step,int mark,double s){
if(step==n){
if(ans>s)ans=s;
return;
}
for(int i=0;i<n;i++){
if(ps[i].visit)continue;
int tmp=mark+1<<i;
if(f[i][tmp]==0||f[i][tmp]>f[ppp.num][mark]+dis(ps[i],ppp)){
f[i][tmp]=f[ppp.num][mark]+dis(ps[i],ppp);
ps[i].visit=1;
dfs(ps[i],step+1,tmp,s+dis(ps[i],ppp));
ps[i].visit=0;
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>ps[i].x>>ps[i].y;
ps[i].visit=0;
ps[i].num=i;
}
p pp={0,0,1,0};
dfs(pp,0,0,0);
printf("%.2f",ans);
return 0;
}