int u[2000],v[2000],w[2000]; ll z=ll_inf; wgraph g; DijkstraHeap h; { ll@t,@n,@m; h.walloc(n); rd((u--,v--,w)(m)); if(t==0){ g.setEdge(n,m,u,v,w); }else{ g.setDirectEdge(n,m,u,v,w); } rep(t,n){ rep(a,g.es[t]){ int s=g.edge[t][a]; h.init(n); h.change(s,g.cost[t][a]); while(h.size){ int i=h.pop(); ll iv=h.val[i]; rep(k,g.es[i]){ int j=g.edge[i][k]; if(i!=s||j!=t){ h.change(j,iv+g.cost[i][k]); } } } if(h.visited[t]){ z