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