#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<cmath>#include<cstring>#include<string>#include<vector>#include<set>#include<stack>#include<list>#include<map>#define INF 0x3f3f3f3f#define MID l + r >> 1#define lsn rt << 1#define rsn rt << 1 | 1#define Lson lsn, l, mid#define Rson rsn, mid+1, r#define QL Lson, ql, qr#define QR Rson, ql, qr
using namespace std;typedeflonglong ll;constint maxN =100+5;constint maxM =2e5+5;int n;struct node{double x, y;}coord[maxN];double mp[maxN][maxN];double dis[maxN];int vis[maxN];doublePrime(){double ans =0;for(int i =0; i < n ; i ++){
dis[i]=(i ==0?0: INF);
vis[i]=0;}for(int j =0; j < n ; j ++){double minn = INF;int min_pos =-1;for(int i =0; i < n ; i ++){if(!vis[i]&& dis[i]< minn){
minn = dis[i];
min_pos = i;}}
vis[min_pos]=1;for(int i =0; i < n ; i ++){if(dis[i]> mp[min_pos][i])
dis[i]= mp[min_pos][i];}
ans += minn;}return ans;}intmain(){while(~scanf("%d",&n)){for(int i =0; i < n ; i ++)scanf("%lf%lf",&coord[i].x,&coord[i].y);for(int i =0; i < n ; i ++){for(int j = i +1; j < n ; j ++){
mp[i][j]=sqrt((coord[i].x - coord[j].x)*(coord[i].x - coord[j].x)+(coord[i].y - coord[j].y)*(coord[i].y - coord[j].y));
mp[j][i]= mp[i][j];}}printf("%.2f\n",Prime());}return0;}