#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
vector<int> fa(110);
void init(int n){
//fa.clear();
//fa.resize(n+1); // 重新分配空间
for(int i=0;i<=n;i++)fa[i]=i;
return;
}
int find(int x){
if(x!=fa[x])fa[x]=find(fa[x]);
return fa[x];
}
void join(int x,int y){
x=find(x);
y=find(y);
if(x!=y)fa[y]=fa[x];
}
struct Edg{
int l,r,val,f;
};
bool com(const Edg &a,const Edg &b){
return a.val<b.val;
}
int main(){
int n;
while(cin>>n){
if(n==0)break;
vector<Edg> edg;
init(n);
int a,b,c,d,t;
t=n*(n-1)/2;
while(t--){
cin>>a>>b>>c>>d;
if(d==0){
Edg e={a,b,c,d};
edg.push_back(e);
}else join(a,b);
}
sort(edg.begin(),edg.end(),com);
int res=0;
int x,y;
for(int i=0;i<edg.size();i++){
x=find(edg[i].l);
y=find(edg[i].r);
if(x!=y){
if(edg[i].f==0)res+=edg[i].val;
join(x,y);
}
}
cout<<res<<endl;
}
}