int n,m,x,y,z,t; int e1[2d5],e2[2d5],ez[2d5],en; int s[2d5]; unionFind u; graph g; Mint b,r; { rd(n,m,b); u.walloc(n,1); rep(m){ rd(x--,y--,z); if(u(x,y))e1[en]=x,e2[en]=y,ez[en]=z,++en; } g.setEdge(n,en,e1,e2); g.SubTreeSize(0,s); rep(i,en){ t=min(s[e1[i]],s[e2[i]]); r+=b**ez[i]*t*(n-t); } wt(r); }