#include <iostream>
#include<cmath>
#include<cstdio>
#define MAX 1000000
using namespace std;
int n;
double cost[10001];
const int INF =0x3f3f3f;
bool vis[10001];
double dis[1000][1000];
typedef struct{
int x,y,z;
}node;
node point[10000];
void read(){
cin>>n;
for(int i=0;i<n;i++)
cin>>point[i].x>>point[i].y>>point[i].z;
}
void init(){
memset (dis , MAX , sizeof MAX);
memset(dis, INF, sizeof dis);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
dis[i][j]=sqrt((point[i].x-point[j].x)*(point[i].x-point[j].x)+(point[i].y-point[j].y)*(point[i].y-point[j].y)+(point[i].z-point[j].z)*(point[i].z-point[j].z));
}
}
double Prim(){
memset (vis , false , sizeof vis);
double ans=0;
vis[0]=true;
for(int i=0;i<n;i++)
cost[i]=dis[0][i];
cost[0]=0;
for(int i=1;i<n;i++){
int p=-1;
double minn=MAX;
for(int j=1;j<n;j++)
{
if(minn>cost[j]&&!vis[j]){
p=j;
minn=cost[j];
}
}
if(minn==MAX)
return -1;
ans+=minn;
vis[p]=true;
for(int j=1;j<n;j++){
if(!vis[j]&&dis[p][j]<cost[j])
cost[j]=dis[p][j];
}
}
return ans;
}
int main()
{
int T;
cin>>T;
while(T--){
read();
init();
printf("%.2f\n",Prim());
}
}