n, q = LI() uf = dsu.DSU(n) gr = [[] for _ in range(n)] for _ in range(q): t, a, b = LI() a, b = a-1, b-1 uf.merge(a, b) gr[a].append((b, t)) gr[b].append((a, t)) nowA = [-1] * n def dfs(now, k): if nowA[now] != -1: return nowA[now] == k nowA[now] = k for to, t in gr[now]: if not dfs(to, k ^ t): return False return True for g in uf.groups(): if not dfs(g[0], 0): print(0) exit() print(pow(2, len(uf.groups()), 998244353))