#include <stdio.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 1e4+100;
struct City {
    int to,len,va;
};
struct Spend {
    int len,va;
}sp[maxn];

vector <City> ve[maxn];
int n,m;
bool vis[maxn];

void init() {
    for(int i=1;i<=n;i++) {
        sp[i].va = sp[i].len = 0x7f7f7f7f;
        ve[i].clear();
    }

    City temp;
    for(int i=0;i<m;i++) {
        int a,b,len,va;
        scanf("%d%d%d%d",&a,&b,&len,&va);
        temp.to = b,temp.len = len,temp.va = va;
        ve[a].push_back(temp);
        temp.to = a;
        ve[b].push_back(temp);
    }
}

void spfa() {
    sp[1].len = sp[1].va = 0;
    queue <int> qu;
    qu.push(1);
    while(!qu.empty()) {
        int now = qu.front(); qu.pop();
        vis[now] = false;
        for(int i=0;i<ve[now].size();i++) {
            City temp = ve[now][i];
            int v = temp.to;
            int d = temp.len;
            int va = temp.va;
            if(sp[v].len > sp[now].len + d) {
                sp[v].len = sp[now].len + d;
                sp[v].va =  va;
                if(!vis[v]) {
                    qu.push(v);
                    vis[v] = true;
                }
            }
            if(sp[v].len == sp[now].len + d && sp[v].va > va) {
                sp[v].va = va;
            }
        }
    }
}

void get_len() {
    int tot = 0;
    for(int i=1;i<=n;i++) {
        tot += sp[i].va;
    }
    printf("%d\n",tot);
}

int main() {
    while(scanf("%d%d",&n,&m) && n+m) {
        init();
        spfa();
        get_len();
    }
    return 0;
}
