#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <cmath>
using namespace std;
#define eps 1e-8
#define INF 0x1f1f
struct Cell
{
double x, y, z, r;
} num[111];
double getdis(Cell a, Cell b)
{
return sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y) + (a.z - b.z)*(a.z - b.z));
}
double dis[111][111], ans;
double len[111];
bool vis[111];
void prime(int n)
{
int pos;
double minn = INF;
memset(vis, 0, sizeof(vis));
vis[0] = 1;
for( int i = 0; i < n; i++)
len[i] = dis[0][i];
for(int i = 1; i < n; i++)
{
minn = INF;
for(int i = 0; i < n; i++)
{
if(!vis[i] && minn > len[i])
{
minn = len[i];
pos = i;
}
}
if(minn == INF)
{
printf("0.000\n");
return ;
}
vis[pos] = 1;
ans += minn;
for( int i = 0; i < n ; i++)
{
if(!vis[i] && len[i] > dis[pos][i])
len[i] = dis[pos][i];
}
}
printf("%.3lf\n",ans);
return ;
}
int main()
{
int n;
while(scanf("%d",&n) != EOF && n)
{
ans = 0;
for(int i = 0; i < n; i++)
scanf("%lf %lf %lf %lf",&num[i].x, &num[i].y ,&num[i].z, &num[i].r);
for(int i = 0; i < n; i++)
{
dis[i][i] = 0;
for( int j = i + 1; j < n; j++)
{
double r = num[i].r + num[j].r;
double d = getdis(num[i], num[j]);
if( d - r < eps)
dis[i][j] = dis[j][i] = 0;
else
dis[i][j] = dis[j][i] = d - r;
}
}
prime(n);
}
return 0;
}
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <cmath>
using namespace std;
#define eps 1e-8
#define INF 0x1f1f
struct Cell
{
double x, y, z, r;
} num[111];
double getdis(Cell a, Cell b)
{
return sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y) + (a.z - b.z)*(a.z - b.z));
}
double dis[111][111], ans;
double len[111];
bool vis[111];
void prime(int n)
{
int pos;
double minn = INF;
memset(vis, 0, sizeof(vis));
vis[0] = 1;
for( int i = 0; i < n; i++)
len[i] = dis[0][i];
for(int i = 1; i < n; i++)
{
minn = INF;
for(int i = 0; i < n; i++)
{
if(!vis[i] && minn > len[i])
{
minn = len[i];
pos = i;
}
}
if(minn == INF)
{
printf("0.000\n");
return ;
}
vis[pos] = 1;
ans += minn;
for( int i = 0; i < n ; i++)
{
if(!vis[i] && len[i] > dis[pos][i])
len[i] = dis[pos][i];
}
}
printf("%.3lf\n",ans);
return ;
}
int main()
{
int n;
while(scanf("%d",&n) != EOF && n)
{
ans = 0;
for(int i = 0; i < n; i++)
scanf("%lf %lf %lf %lf",&num[i].x, &num[i].y ,&num[i].z, &num[i].r);
for(int i = 0; i < n; i++)
{
dis[i][i] = 0;
for( int j = i + 1; j < n; j++)
{
double r = num[i].r + num[j].r;
double d = getdis(num[i], num[j]);
if( d - r < eps)
dis[i][j] = dis[j][i] = 0;
else
dis[i][j] = dis[j][i] = d - r;
}
}
prime(n);
}
return 0;
}