#include<stdio.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<queue>
using namespace std;
const int maxn = 105;
const double inf = 100000000.0;
int n,m;
double dis[maxn];
bool vis[maxn];
struct Node
{
int x,y;
}node[maxn];
double getDist( int a,int b )
{
return sqrt( (( node[a].x - node[b].x ) * ( node[a].x - node[b].x ) + ( node[a].y - node[b].y )*( node[a].y - node[b].y ))*1.0);
}
void Prime( int s )
{
double dist,mins,ans = 0.0;
memset( vis,0,sizeof(vis) );
for( int i = 1; i <= n; i ++ )
{
dist = getDist(s,i);
if( dist >= 10.000000 && dist <= 1000.000001 )
dis[i] = dist;
else
dis[i] = inf;
}
vis[s] = true;
for ( int i = 1; i <= n; i ++ )
{
mins = inf;
int p = s;
for( int j = 1; j <= n; j ++ )
{
if ( !vis[j] && mins - dis[j] >= -0.0000001 )
{
mins = dis[p = j];
}
}
if( vis[p] )
continue;
ans += mins;
vis[p] = true;
for ( int j = 1; j <= n; j ++ )
{
dist = getDist(p,j);
if( dis[j] - dist > -0.0000001 && dist >= 10.000000 && dist <= 1000.000001 )
{
dis[j] = dist;
}
}
}
if( ans > inf )
puts("oh!");
else
printf("%.1lf\n", ans*100.0 );
}
int main()
{
//freopen("data.txt","r",stdin);
int t;
scanf("%d",&t);
while( t-- )
{
scanf("%d",&n);
for ( int i = 1; i <= n; i ++ )
{
scanf("%d%d",&node[i].x,&node[i].y);
}
Prime(1);
}
return 0;
}
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
int n,ans;
int p[105];
struct node
{
int s,e,dis;
}road[5000];
bool cmp( node a,node b)
{
return a.dis<b.dis;
}
int find(int x)
{
return x!=p[x]?p[x]=find(p[x]):x;
}
void merge( int i )
{
int x = find( road[i].s );
int y = find( road[i].e );
if( x!=y)
{
p[x]=y;
ans += road[i].dis;
}
}
int main()
{
int m,i;
while( scanf("%d",&n)!=EOF && n )
{
ans=0;
m=n*(n-1)/2;
for(i=0;i<m;i++)
scanf("%d%d%d",&road[i].s,&road[i].e,&road[i].dis);
sort(road,road+m,cmp);
for(i=1;i<=n;i++)
p[i]=i;
for(i=0;i<m;i++)
{
merge(i);
}
printf("%d\n",ans);
}
return 0;
}