#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> using namespace std; typedef struct { int a,b; double v; }node; typedef struct { int a,b; }P; const int maxn=109; double ans; int father[maxn]; node graph[maxn*(maxn-1)/2]; P p[maxn]; int Find(int x) { if(father[x]==x) return x; else { father[x]=Find(father[x]); return father[x]; } } void Union(int x,int y,double v) { if(Find(x)!=Find(y)) { ans+=v*100; father[Find(x)]=Find(y); } return; } bool cmp(node x,node y) { if(x.v<y.v) return true; else return false; } int main() { double V; int n; scanf("%d",&n); while(n--) { ans=0; for(int i=0;i<maxn;i++) father[i]=i; int m,k; k=0; scanf("%d",&m); for(int i=0;i<m;i++) { scanf("%d%d",&p[i].a,&p[i].b); } for(int i=0;i<m-1;i++) { for(int j=i+1;j<m;j++) { V=sqrt(pow((p[i].a-p[j].a),2.0)+pow((p[i].b-p[j].b),2.0)); if(V<=1000&&V>=10) { graph[k].a=i; graph[k].b=j; graph[k].v=V; k++; } } } sort(graph,graph+k,cmp); for(int i=0;i<k;i++) Union(graph[i].a,graph[i].b,graph[i].v); int xx=Find(0); int flag; flag=0; for(int i=0;i<m;i++) { if(Find(i)!=xx) { flag=1; break; } } if(flag==1) printf("oh! "); else printf("%.1lf ",ans); } return 0; }