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 $ - 入力はすべて整数