/* -*- coding: utf-8 -*- * * 3695.cc: No.3695 蜷悟ョ、縺ィ蛻・螳、 - yukicoder */ #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 200000; const int MOD = 998244353; /* typedef */ using ll = long long; using qi = queue; using pii = pair; using vpii = vector; /* global variables */ vpii nbrs[MAX_N]; int ds[MAX_N]; /* subroutines */ /* main */ int main() { int n, qn; scanf("%d%d", &n, &qn); for (int i = 0; i < qn; i++) { int t, u, v; scanf("%d%d%d", &t, &u, &v); u--, v--; nbrs[u].push_back({v, t}); nbrs[v].push_back({u, t}); } fill(ds, ds + n, -1); int p = 1; for (int rt = 0; p > 0 && rt < n; rt++) if (ds[rt] < 0) { p = (ll)p * 2 % MOD; ds[rt] = 0; qi q; q.push(rt); while (! q.empty()) { int u = q.front(); q.pop(); for (auto [v, t]: nbrs[u]) { int vd = ds[u] ^ t; if (ds[v] < 0) ds[v] = vd, q.push(v); else if (ds[v] != vd) { p = 0; break; } } } } printf("%d\n", p); return 0; }