//用的方法比较笨来解决这个问题,就是把任意两个点的距离全部算出来,然后排序,但是要舍掉不合适的点,参考代码如下:
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
int per[100010];
int m;
struct node
{int u,v;
double w;
};
node a[10010];
struct node1{
double x,y;
};
node1 b[10010];
double cmp(node a,node b){
return a.w<b.w;
}
void init(){
for(int i=1;i<=11000;i++)
per[i]=i;
}
int find (int x){
int r=x;
while(r!=per[r])
r=per[r];
int i=x,j;
while(i!=r){
j=per[i];
per[i]=r;
i=j;
}
return r;
}
bool join (int x,int y){
int fx=find(x);
int fy=find(y);
if(fx!=fy){
per[fx]=fy;
return true ;
}
return false;
}
int main(){
int t,s,i,j;
scanf("%d",&t);
while(t--){
int k=1;
scanf("%d",&s);
for( i=1;i<=s;i++)
scanf("%lf%lf",&b[i].x,&b[i].y);
for(i=1;i<=s;i++)
for(j=i+1;j<=s;j++){
a[k].w=sqrt((b[i].x-b[j].x)*(b[i].x-b[j].x)+(b[i].y-b[j].y)*(b[i].y-b[j].y));
if(a[k].w<10||a[k].w>1000)
continue ;
a[k].u=i;
a[k].v=j;
k++;
}
m=k;
sort(a+1,a+m+1,cmp);
double sum=0;
int num=0;
init();
for(i=1;i<=m;i++){
if(join(a[i].u,a[i].v)){
num++;
sum+=a[i].w;
}
}
if(num==s-1)
printf("%.1lf\n",sum*100);
else
printf("oh!\n");
}
return 0;
}