class UnionFind:
    def __init__(self,n):
        self.pt=[i for i in range(n+1)]
        self.h=[0 for i in range(n+1)]
    def find(self,x):
        if self.pt[x]!=x:
            return self.find(self.pt[x])
        return x
    def union(self,x,y):
        px,py=self.pt[x],self.pt[y]
        if px==py:
            return
        if self.h[px]>self.h[py]:
            self.pt[y]=self.find(x)
        elif self.h[px]<self.h[py]:
            self.pt[x]=self.find(y)
        else:
            self.pt[x] = self.find(y)
            self.h[py]+=1
while True:
    try:
        n = int(input())
        if n==0:
            break
        v = UnionFind(n)
        edge = []
        for i in range(n * (n - 1) // 2):
            x = list(map(int, input().split(' ')))
            if x[3] == 1:
                x[2] = 0
            edge.append(x)
        edge.sort(key=lambda x: x[2])
        sum = 0
        for i in range(n * (n - 1) // 2):
            if v.find(edge[i][0]) != v.find(edge[i][1]):
                sum += edge[i][2]
                v.union(v.find(edge[i][0]), v.find(edge[i][1]))
        print(sum)
    except:
        break