#include <stdio.h>
typedef struct Egel
{
int to;
int from;
int weight;
int build;
}Egel;
int getRoot(int root[],int v)
{
int r=v;
while(r!=root[r])
{
r=root[r];
}
return r;
}
int sort(Egel egels[],int n)
{
for(int i=0;i<n*(n-1)/2;i++)
{
int k=i;
for(int j=i+1;j<n*(n-1)/2;j++)
{
if(egels[j].build==1&&egels[k].build==0)
{
k=j;
}
else if(egels[j].weight<egels[k].weight &&egels[j].build==0 &&egels[k].build==0)
{
k=j;
}
}
if(k!=i)
{
int temp1=egels[i].to;
int temp2=egels[i].from;
int temp3=egels[i].weight;
int temp4=egels[i].build;
egels[i].to=egels[k].to;
egels[i].from=egels[k].from;
egels[i].weight=egels[k].weight;
egels[i].build=egels[k].build;
egels[k].to=temp1;
egels[k].from=temp2;
egels[k].weight=temp3;
egels[k].build=temp4;
}
}
}
int getValues(Egel egels[],int n)
{
int root[100];
for(int i=0;i<100;i++)
{
root[i]=i;
}
int sum=0;
for(int i=0;i<n*(n-1)/2;i++)
{
int a=getRoot(root,egels[i].to);
int b=getRoot(root,egels[i].from);
if(a!=b)
{
if(egels[i].build==0)
{
sum=sum+egels[i].weight;
}
root[a]=b;
}
}
printf("%d\n",sum);
}
int main()
{
while(1)
{
int N;
scanf("%d",&N);
if(N==0)
{
break;
}
Egel egels[10000];
for(int i=0;i<N*(N-1)/2;i++)
{
scanf("%d%d",&egels[i].to,&egels[i].from);
scanf("%d%d",&egels[i].weight,&egels[i].build);
}
sort(egels,N);
getValues(egels,N);
}
}
/**************************************************************
Problem: 2205
User: admin
Language: C
Result: Accepted
Time:86 ms
Memory:1180 kb
****************************************************************/