#include #include #include using namespace std; using namespace __gnu_pbds; using ll=long long; vector toposort(const int n,const vector>& edges){ queue que; vector indegree(n); vector> adj(n); for(auto& [u,v]: edges){ ++indegree[v]; adj[u].emplace_back(v); } for(int i=0;i ret; while(!que.empty()){ const int u=que.front(); que.pop(); ret.emplace_back(u); for(int&v:adj[u])if(!--indegree[v])que.emplace(v); } return ret; } void solve(){ int N,M;cin>>N>>M; vector> edges; vector>> material(N); for(int i=0;i>u>>c>>v; --u,--v; edges.emplace_back(u,v); material[v].emplace_back(u,c); } auto order=toposort(N,edges); ranges::reverse(order); vector ans(N); ans.at(N-1)=1; for(auto&u:order){ for(auto&[v,cost]:material[u]){ ans[v]+=ans[u]*cost; } if(!material[u].empty())ans[u]=0; } ans.erase(prev(ans.end())); for(auto&c:ans)cout<>T; while(T--)solve(); return 0; }