#pragma GCC optimize("Ofast") #include using namespace std; typedef long long int ll; typedef unsigned long long ull; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); ll myRand(ll B) { return (ull)rng() % B; } int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int n,m; cin >> n >> m; vector>>> g(n); for(int i=0;i> a >> b >> c >> x; a--; b--; g[a].push_back({b,{c,x}}); g[b].push_back({a,{c,x}}); } vector> dp(2,vector(n,1e18)); priority_queue>,vector>>,greater>>> pq; pq.push({0,{0,n-1}}); dp[0][n-1]=0; while(pq.size()){ auto p=pq.top(); pq.pop(); int f=p.second.first,s=p.second.second; if(p.first!=dp[f][s])continue; for(auto to:g[s]){ int nxf=f|(to.second.second); ll cost=p.first+to.second.first; int t=to.first; if(dp[nxf][t]>cost){ dp[nxf][t]=cost; pq.push({cost,{nxf,t}}); } } } for(int i=0;i+1