#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll INF=1LL<<60; typedef pair P; typedef pair PP; const ll MOD=998244353; ll mod_pow(ll x,ll y,ll mod){ ll res=1; while(y>0){ if(y&1){ res*=x; res%=mod; } x*=x; x%=mod; y/=2; } return res; } int main(){ int N,Q; cin>>N>>Q; vector A(Q),B(Q),C(Q); vector> G(N); for(int i=0;i>A[i]>>B[i]>>C[i]; A[i]--;B[i]--; G[A[i]].emplace_back(B[i],C[i]); G[B[i]].emplace_back(A[i],C[i]); } vector color(N,0);//まだ塗られていない auto dfs=[&](auto f,int now,int c)->bool{ color[now]=c; for(auto [to,flag]:G[now]){ if(color[to]!=0){ if(flag==1){ //toとnowが同じ色ならNG if(color[to]==color[now]) return false; }else{ //flag==0 if(color[to]!=color[now]) return false; } }else{ if(flag==1){ //nowとtoは異なる色でなければならない if(!f(f,to,-c)){ return false; } }else{ //nowとtoは同じ色でなければならない if(!f(f,to,c)){ return false; } } } } return true; }; ll ans=1; for(int i=0;i