#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
const int N=20;
int n;
double spot[N][2],dis[N][N],state[1<<N][N],ans=1e9;
bool vis[N];
void dfs(int cur_p,int cur_s,double res){
if(res>=ans)return;
if(cur_s==(1<<n)-1){
ans=res;return;
}
for(int i=1;i<=n;i++)
if(!vis[i]){
int try_s=cur_s+(1<<i-1);
if(state[try_s][i]!=0&&state[try_s][i]<=res+dis[cur_p][i])continue;
vis[i]=true;
state[try_s][i]=res+dis[cur_p][i];
dfs(i,try_s,state[try_s][i]);
vis[i]=false;
}
}
int main(){
cin>>n;
spot[0][0]=spot[0][1]=0;
for(int i=1;i<=n;i++)cin>>spot[i][0]>>spot[i][1];
for(int i=0;i<n;i++)
for(int j=i+1;j<=n;j++){
double t=(spot[i][0]-spot[j][0])*(spot[i][0]-spot[j][0])
+(spot[i][1]-spot[j][1])*(spot[i][1]-spot[j][1]);
dis[i][j]=sqrt(t);
dis[j][i]=dis[i][j];
}
dfs(0,0,0);
cout<<fixed<<setprecision(2)<<ans<<endl;
return 0;
}