#include #include #include using namespace atcoder; using mint = modint1000000007; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000000000000000 int main(){ int N,M; cin>>N>>M; vector A(M),B(M),C(M),D(M); vector> E(N); rep(i,M){ scanf("%lld %lld %lld %lld",&A[i],&B[i],&C[i],&D[i]); A[i]--;B[i]--; E[A[i]].push_back(i); E[B[i]].push_back(i); } vector dis(N*2,Inf); priority_queue,vector>,greater>> Q; dis[N*2-1] = 0LL; Q.emplace(0,N*2-1); while(Q.size()>0){ long long DD = Q.top().first; int u = Q.top().second/2,x = Q.top().second%2; Q.pop(); if(DD != dis[u*2+x])continue; rep(i,E[u].size()){ int ind = E[u][i]; int v = A[ind] ^ B[ind] ^ u; int nx = x; if(D[ind])nx = 0; long long D2 = DD + C[ind]; int temp = v*2 + nx; if(dis[temp]>D2){ dis[temp] = D2; Q.emplace(D2,temp); } } } rep(i,N-1){ cout<