#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
****************************************************************/