#include <iostream>  
#include <stdio.h>  
#include <stdlib.h>  
#include<string.h>  
#include<algorithm>  
#include<math.h>  
#include<queue>  
using namespace std;  
typedef long long ll;  
const int maxn=10010,INF=99999999;  
int ip,n,m,head[maxn],dis[maxn],jl[maxn];  
bool vis[maxn];  
struct data  
{  
    int next,to,d,w;  
} tu[maxn*maxn];  
  
void init()  
{  
    ip=0;  
    memset(head,-1,sizeof(head));  
}  
  
void add(int a,int b,int d,int w)  
{  
    tu[ip].to=b,tu[ip].d=d,tu[ip].w=w,tu[ip].next=head[a],head[a]=ip++;  
}  
  
void spfa()  
{  
    for(int i=1; i<=n; i++)  
        dis[i]=jl[i]=INF;  
    dis[1]=0;  
    jl[1]=0;  
    memset(vis,0,sizeof(vis));  
    queue<int>q;  
    q.push(1);  
    while(!q.empty())  
    {  
        int t=q.front();  
        q.pop();  
        vis[t]=0;  
        for(int k=head[t]; k!=-1; k=tu[k].next)  
        {  
            int d=tu[k].d,v=tu[k].to,w=tu[k].w;  
            if(dis[t]+d<dis[v])  
            {  
                jl[v]=w;///??最小花?  
                dis[v]=dis[t]+d;  
                if(!vis[v])  
                {  
                    vis[v]=1;  
                    q.push(v);  
                }  
            }  
            else if(dis[t]+d==dis[v]&&w<jl[v])///??最小花?  
                jl[v]=w;  
        }  
    }  
    int ans=0;  
    for(int i=1; i<=n; i++)  
        ans+=jl[i];  
    printf("%d\n",ans);  
}  
  
  
int main()  
{  
    while(~scanf("%d%d",&n,&m)&&m+n)  
    {  
        init();  
        while(m--)  
        {  
            int a,b,d,w;  
            scanf("%d%d%d%d",&a,&b,&d,&w);  
            add(a,b,d,w);  
            add(b,a,d,w);  
        }  
        spfa();  
    }  
    return 0;  
}  