use proconio::input; use ac_library::Dsu; const MOD: i64 = 998244353; fn modpow(mut a: i64, mut e: i64) -> i64{ let mut r: i64 = 1; while e > 0{ r = if e&1 == 1{r*a%MOD} else{r}; a = a*a%MOD; e >>= 1; } return r; } fn main(){ input!{ n: usize, q: usize, qs: [(usize, usize, usize); q], } let mut uf = Dsu::new(2*n); for &(t, u, v) in &qs{ if t == 0{ uf.merge(u-1, v-1); uf.merge(n+u-1, n+v-1); }else{ uf.merge(u-1, n+v-1); uf.merge(v-1, n+u-1); } } for i in 0..n{ if uf.same(i, n+i){ println!("{}", 0); return; } } let mut cnt: i64 = 0; for i in 0..2*n{ if uf.leader(i) == i{ cnt += 1; } } println!("{}", modpow(2_i64, cnt/2)); }