use std::io; const MOD: i64 = 998244353; fn mod_pow(base: i64, exp: i64, modulus: i64) -> i64 { let mut result = 1; let mut base = base % modulus; let mut exp = exp; while exp > 0 { if exp % 2 == 1 { result = result * base % modulus; } base = base * base % modulus; exp /= 2; } result } fn prod(a: &Vec>, b: &Vec>, k: usize, l: usize, m: usize) -> Vec> { let mut c = vec![vec![0; m]; k]; for i in 0..k { for j in 0..m { let mut ans = 0; for pl in 0..l { ans = (ans + a[i][pl] * b[pl][j]) % MOD; } c[i][j] = ans; } } c } fn main() { let mut input = String::new(); io::stdin().read_line(&mut input).unwrap(); let nums: Vec = input.trim().split_whitespace().map(|x| x.parse().unwrap()).collect(); let (n, q) = (nums[0], nums[1]); input.clear(); io::stdin().read_line(&mut input).unwrap(); let mut a: Vec> = vec![input.trim().split_whitespace().map(|x| x.parse().unwrap()).collect()]; for _ in 0..q { input.clear(); io::stdin().read_line(&mut input).unwrap(); let l: Vec = input.trim().split_whitespace().map(|x| x.parse().unwrap()).collect(); if l[0] == 2 { let x = (l[1] - 1) as usize; println!("{}", a[0][x]); continue; } let (k, x) = (l[1], l[2]); let mut l_vec = vec![1i64]; let (mut bunshi, mut bunbo) = (x, 1); for i in 1..=n { let now = *l_vec.last().unwrap(); l_vec.push(now * k * bunshi % MOD * mod_pow(bunbo, MOD - 2, MOD) % MOD); bunshi += 1; bunbo += 1; } let mut x_mat = vec![vec![0; n]; n]; for i in 0..n { for j in 0..n { if i + j < n { x_mat[i][i + j] = l_vec[j]; } else { break; } } } a = prod(&a, &x_mat, 1, n, n); } }