AT_waipc_qual_e XOR and Shift
Description
長さ $ 2^N $ の非負整数列が $ M $ 個黒板に書いてあります. $ i $ 番目 ( $ 1 \leq i \leq M $ ) の数列は $ A_i=(A_{i,1},A_{i,2},\ldots,A_{i,2^N}) $ です.
あなたは以下の $ 2 $ 種類の操作を好きな順番で好きな回数行うことができます.
- 黒板に書かれた数列を $ 1 $ つ自由に選び,それを $ 1 $ 回左シフトしたものを新たに黒板に書き込む. より正確に言えば,数列 $ x=(x_1,x_2,\ldots,x_{2^N}) $ を選んだ場合,新たに $ (x_2,\ldots,x_{2^N},x_1) $ を書き込む.
- 黒板に書かれた数列を $ 2 $ つ(これらが同一でも構わない)を自由に選び,それらの要素ごとのビット単位 $ \mathrm{XOR} $ をとった数列を新たに黒板に書き込む. より正確に言えば,数列 $ x=(x_1,x_2,\ldots,x_{2^N}),y=(y_1,y_2,\ldots,y_{2^N}), $ を選んだ場合,新たに $ (x_1 \oplus y_1,x_2 \oplus y_2,\ldots,x_{2^N} \oplus y_{2^N}) $ を書き込む.
どちらの操作でも,選んだ数列は消えないことに注意してください.
黒板に書き込むことができる数列の種類数を $ 998244353 $ で割ったあまりを求めてください.
ビット単位 $ \mathrm{XOR} $ 演算とは 非負整数 $ A, B $ のビット単位 $ \mathrm{XOR} $ 、 $ A \oplus B $ は、以下のように定義されます。
- $ A \oplus B $ を二進表記した際の $ 2^k $ ( $ k \geq 0 $ ) の位の数は、 $ A, B $ を二進表記した際の $ 2^k $ の位の数のうち一方のみが $ 1 $ であれば $ 1 $ 、そうでなければ $ 0 $ である。
例えば、 $ 3 \oplus 5 = 6 $ となります (二進表記すると: $ 011 \oplus 101 = 110 $ )。
一般に $ k $ 個の非負整数 $ p_1, p_2, p_3, \dots, p_k $ のビット単位 $ \mathrm{XOR} $ は $ (\dots ((p_1 \oplus p_2) \oplus p_3) \oplus \dots \oplus p_k) $ と定義され、これは $ p_1, p_2, p_3, \dots, p_k $ の順番によらないことが証明できます。
Input Format
入力は以下の形式で標準入力から与えられる.
> $ N $ $ M $ $ A_{1,1} $ $ A_{1,2} $ $ \ldots $ $ A_{1,2^N} $ $ A_{2,1} $ $ A_{2,2} $ $ \ldots $ $ A_{2,2^N} $ $ \vdots $ $ A_{M,1} $ $ A_{M,2} $ $ \ldots $ $ A_{M,2^N} $
Output Format
答えを出力せよ.
Explanation/Hint
### Sample Explanation 1
以下の手順で $ 4 $ 種類の数列を書き込むことができます.
- 最初,黒板には $ (1,2) $ のみが書かれている
- $ (1,2) $ と $ (1,2) $ を選び $ \mathrm{XOR} $ をとることで, $ (0,0) $ を書き込むことができる.
- $ (1,2) $ を選んで左シフトすることで, $ (2,1) $ を書き込むことができる.
- $ (1,2) $ と $ (2,1) $ を選び $ \mathrm{XOR} $ をとることで, $ (3,3) $ を書き込むことができる.
### Constraints
- $ 1 \leq N \leq 16 $
- $ 1 \leq M \leq 8 $
- $ 0 \leq A_{i,j} < 256 $
- 入力はすべて整数