#include using namespace std; #define int long long const int p=998244353; int po(int a,int b) {if(b==0) return 1; if(b==1) return a; if(b%2==0) {int u=po(a,b/2);return (u*1LL*u)%p;} else {int u=po(a,b-1);return (a*1LL*u)%p;}} int inv(int x) {return po(x,p-2);} mt19937 rnd; #define app push_back #define all(x) (x).begin(),(x).end() #ifdef LOCAL #define debug(...) [](auto...a){ ((cout << a << ' '), ...) << endl;}(#__VA_ARGS__, ":", __VA_ARGS__) #define debugv(v) do {cout<< #v <<" : {"; for(int izxc=0;izxc,int> ed;map,int> id; vector > g[maxn]; bool used[maxn]; int pr[maxn];int pot[maxn]; void solve2(vector v) { int sum=0; for(int i=0;i vx,vy; vx.app(x);vy.app(y); while(pr[vx.back()]!=(-1)) {vx.app(pr[vx.back()]);} while(pr[vy.back()]!=(-1)) {vy.app(pr[vy.back()]);} debugv(vx);debugv(vy); map posx;for(int i=0;i h; for(int i=0;i=0;--s) { h.app(vx[s]); } solve2(h); } else { h.app(vy[i]); } } assert(false); } void dfs(int x) { used[x]=true; for(auto [v,w]:g[x]) { if(!used[v]) { pr[v]=x; pot[v]=pot[x]+w; dfs(v); } else { if(pot[v]!=pot[x]+w) { solve(x,v); } } } } int32_t main() { ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); fill(pr,pr+maxn,-1); int n,m;cin>>n>>m; for(int i=0;i>x>>y>>w;--x;--y; if(ed.count({x,y}) && ed[{x,y}]==w) { continue; } else if(ed.count({x,y})) { if(ed[{x,y}]-w>0) { cout<<2<<'\n'<