/*
 * main.cpp
 *
 *  Created on: 2013-7-28
 *      Author: whd
 */
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#define pb push_back
#define mp make_pair
using namespace std;
typedef long long big;
const int N=10200,M=40200;
const int inf=0x3f3f3f3f;
int n,m;
int next[M],v[M],head[N],t=1,d[N],c[N];
struct node
{
	int s,d;
	node(){}
	node(int _s,int _d):s(_s),d(_d){}
	bool operator<(const node &a)const
	{
		return d>a.d;
	}
};
struct E
{
	int a,b,w;
	E(){}
	E(int _a,int _b,int _w):a(_a),b(_b),w(_w){}
	bool operator<(const E &x)const
	{
		return w<x.w;
	}
};
int top=0;
E e[M];
int q[N];
priority_queue<node>heap;
int dis[N];
void add(int a,int b,int _c,int _d)
{
	next[++t]=head[a];v[t]=b;c[t]=_c;d[t]=_d;head[a]=t;
	next[++t]=head[b];v[t]=a;c[t]=_c;d[t]=_d;head[b]=t;
}
void dij()
{
	while(!heap.empty())heap.pop();
	int i;
	node s;
	memset(dis,inf,sizeof(dis));
	dis[1]=0;
	heap.push(node(1,0));
	while(!heap.empty())
	{
		s=heap.top();
		heap.pop();
		if(dis[s.s]!=s.d)continue;
		for(i=head[s.s];i;i=next[i])
			if(dis[v[i]]>dis[s.s]+d[i])
			{
				dis[v[i]]=dis[s.s]+d[i];
				heap.push(node(v[i],dis[v[i]]));
			}
	}
}
int fa[N],f[N],p[N];
int gf(int x)
{
	if(fa[x]!=x)fa[x]=gf(fa[x]);
	return fa[x];
}
bool cmp(const int &a,const int &b)
{
	return dis[a]<dis[b];
}
void sol()
{
	int i,j;
//	top=0;
//	for(i=1;i<=n;i++)
//		for(j=head[i];j;j=next[j])
//			if(dis[v[j]]==dis[i]+d[j])
//				e[++top]=E(i,v[j],c[j]);
//	sort(e+1,e+1+top);
//	big ans=0;
//	for(i=1;i<=n;i++)
//		fa[i]=i;
//	int a,b;
//	for(i=1;i<=top;i++)
//	{
//		a=gf(e[i].a);
//		b=gf(e[i].b);
//		if(a!=b)
//		{
//			fa[a]=b;
//			ans+=e[i].w;
//		}
//	}
	big ans=0;
	top=0;
	memset(f,inf,sizeof(f));
	f[1]=0;
	for(i=1;i<=n;i++)
		q[i]=i;
	sort(q+1,q+1+n,cmp);
	memset(p,inf,sizeof(p));
	for(i=1;i<=n;i++)
		for(j=head[i];j;j=next[j])
			if(dis[v[j]]==dis[i]+d[j])
			{
				if(p[v[j]]>c[j])
				{
					f[v[j]]=f[i]+c[j];
					p[v[j]]=c[j];
				}
			}
	for(i=2;i<=n;i++)
		ans+=p[i];
	printf("%lld\n",ans);
}
int main()
{
	int a,b,_c,_d;
	while(scanf("%d%d",&n,&m),n||m)
	{
		memset(head,0,sizeof(head));
		t=0;
		while(m--)
		{
			scanf("%d%d%d%d",&a,&b,&_d,&_c);
			add(a,b,_c,_d);
		}
		dij();
		sol();
	}
}