from sys import stdin input = stdin.readline class WeightedUnionFind: def __init__(self, n): self.par = [i for i in range(n)] self.rank = [0] * n self.weight = [0] * n def leader(self, x): if self.par[x] == x: return x else: y = self.leader(self.par[x]) self.weight[x] ^= self.weight[self.par[x]] self.par[x] = y return y def merge(self, x, y, w): rx = self.leader(x) ry = self.leader(y) if self.rank[rx] < self.rank[ry]: self.par[rx] = ry self.weight[rx] = w ^ self.weight[x] ^ self.weight[y] else: self.par[ry] = rx self.weight[ry] = w ^ self.weight[y] ^ self.weight[x] if self.rank[rx] == self.rank[ry]: self.rank[rx] += 1 def same(self, x, y): return self.leader(x) == self.leader(y) def diff(self, x, y): return self.weight[x] ^ self.weight[y] MOD = 998244353 N, Q = map(int, input().split()) edge = [list(map(int, input().split())) for _ in range(Q)] UF = WeightedUnionFind(N) for u, v, w in edge: u, v = u-1, v-1 if UF.same(u, v): if UF.diff(u, v) != w: print(0) break else: UF.merge(u, v, w) else: ans = 1 for i in range(N): if UF.leader(i) == i: ans *= 2 ans %= MOD print(ans)