#include <iostream>
#include <string.h>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int tree[105];
int findroot(int x){
if(tree[x] == -1) return x;
else return findroot(tree[x]);
}
struct Edge{
int a, b;
double cost;
}edge[105];
struct dot{
double x, y;
}list[105];
int cmp(Edge x, Edge y){
return x.cost < y.cost;
}
int main(int argc, char** argv) {
int n;
while(cin >> n){
for(int i = 1; i <= n; i++){
cin >>list[i].x >>list[i].y;
}
int size = 0;
for(int i = 1; i <= n; i++){
for(int j = i + 1; j <= n; j++){
edge[size].a = i;
edge[size].b = j;
edge[size].cost = sqrt((list[i].x - list[j].x) * (list[i].x - list[j].x) +(list[i].y - list[j].y)*(list[i].y - list[j].y));
size++;
}
}
sort(edge + 1, edge + 1 + n, cmp);
memset(tree, -1, sizeof(tree));
double ans = 0;
for(int i = 0; i < size; i++){
int a = findroot(edge[i].a);
int b = findroot(edge[i].b);
if(a != b){
tree[a] = b;
ans += edge[i].cost;
}
}
cout << ans << endl;
}
return 0;
}