int u[1d5],v[1d5];
int c[1d5],d[1d5];
{
	int @n,@m;
	rd((u,v,c,d)(m));
	minCostFlow<int,ll>f;
	f.malloc(n+1);
	f.init(n+1);
	rep(i,m){
		f.addEdge(u[i],v[i],1,c[i]);
		f.addEdge(v[i],u[i],1,c[i]);
		f.addEdge(u[i],v[i],1,d[i]);
		f.addEdge(v[i],u[i],1,d[i]);
	}
	ll fres,cres;
	f.solve(1,n,fres,cres,2);
	wt(cres);
}