#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <string>
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
#define N 100+20
#define M 10000+20
#define inf 0x3f3f3f3f
using namespace std;
int n,len;
int pre[N],x[N],y[N];
struct node{int u,v; double w;} map[M];
bool cmp(node a,node b)
{
return a.w<b.w;
}
int find(int x)
{
if(x==pre[x])
return x;
else
{
pre[x]=find(pre[x]);
return pre[x];
}
}
int mix(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)
{
pre[fy]=fx;
return 1;
}
return 0;
}
void Kruskal()
{
sort(map,map+len,cmp);
int cnt=0;
double sum=0;
for(int i=1; i<=len; i++)
{
if(map[i].w<10||map[i].w>1000)
continue;
if(mix(map[i].u,map[i].v))//判断是否已经连接
{
cnt++;
sum+=map[i].w*100;
}
if(cnt==n-1)
break;
}
if(cnt<n-1)
printf("oh!\n");
else
printf("%.1lf\n",sum);
}
int main()
{
int t;
double w;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=1; i<=n; i++)//初始化
pre[i]=i;
len=1;
for(int i=1; i<=n; i++)
{
scanf("%d%d",&x[i],&y[i]);
for(int j=1; j<i; j++)//枚举所有的岛
{
w=sqrt((double)(x[i]-x[j])*(double)(x[i]-x[j])+(double)(y[i]-y[j])*(double)(y[i]-y[j]));
map[len].u=i;//起始点
map[len].v=j;//终止点
map[len].w=w;
len++;//个数
}
}
Kruskal();
}
return 0;
}