#include std::vector< std::pair > g[100000]; long long dp[2][100000]; struct state{ int id; bool used; long long dist; }; bool operator> (const state &state1, const state &state2){ if(state1.dist==state2.dist){ return !state1.used; }else{ return state1.dist>state2.dist; } } int main(){ int N, M; std::cin>>N>>M; for(int i=0;i>a>>b>>c; --a; --b; g[a].push_back(std::make_pair(b,c)); g[b].push_back(std::make_pair(a,c)); } for(int i=0;i<2;++i) { for(int j=0;j, std::greater > pq; state src={0,false,0};//id,used,dist pq.push(src); while(!pq.empty()){ state s = pq.top(); pq.pop(); for(std::pair dst:g[s.id]) { if(!s.used&&dp[1][dst.first]>dp[0][s.id]) { dp[1][dst.first]=dp[0][s.id]; state add= {dst.first,true,dp[1][dst.first]}; pq.push(add); } { int p = s.used?1:0; if(dp[p][dst.first]>dp[p][s.id]+dst.second) { dp[p][dst.first]=dp[p][s.id]+dst.second; state add = {dst.first, s.used, dp[p][dst.first]}; pq.push(add); } } } } for(int i=0;i