#include using namespace std; #include using namespace atcoder; using mint=atcoder::modint1000000007; #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #define int long long #define rep(i,n) for(int i=0;i<(n);i++) #define rng(i,l,r) for(int i=(l);i<(r);i++) #define rrep(i,n) for(int i=(n)-1;i>=0;i--) #define rrng(i,l,r) for(int i=(r)-1;i>=(l);i--) #define fi first #define se second #define all(x) (x).begin(),(x).end() struct fast_io{fast_io(){std::cin.tie(nullptr)->sync_with_stdio(false);}}_; templateusing pqmin=priority_queue,greater>; signed main(){ int N,M;cin>>N>>M; vector>> g(N); rep(i,M){ int a,b,c,x;cin>>a>>b>>c>>x; a--,b--; g[a].push_back({b,c,x}); g[b].push_back({a,c,x}); } vector> d(2,vector(N,1e18)); d[0][N-1]=0; pqmin> pq; pq.push({0,0,N-1}); while(pq.size()){ auto[c,f,p]=pq.top();pq.pop(); if(d[f][p]c+y){ d[f|z][x]=c+y; pq.push({c+y,f|z,x}); } } } // rep(i,2){ // rep(j,N)cout<