AT_arc198_e [ARC198E] Monotone OR
Description
$ 0 $ 以上 $ 2^N $ 未満の非負整数からなる集合 $ S = \lbrace s_1,s_2,\dots,s_M \rbrace $ が与えられます。
あなたは非負整数 $ x = 0 $ を持っています。以下の操作を好きな回数行い、 $ x = 2^N $ とする方法の個数を $ 998244353 $ で割った余りを求めてください。
- $ 1 \le i \le M $ を満たす整数 $ i $ を選び、 $ x $ を $ (x\ \mathrm{OR}\ s_i) + 1 $ で置き換える。
ただし、 $ \mathrm{OR} $ はビットごとの論理和を表します。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ M $ $ s_1\ s_2\ \dots\ s_M $
Output Format
操作方法の個数を $ 998244353 $ で割った余りを出力せよ。
Explanation/Hint
### Sample Explanation 1
$ i $ を選んで操作を行い、 $ x = k $ となった場合、その遷移を $ (i, k) $ と表記します。条件を満たす方法は以下の $ 5 $ 通りです。
- $ (1,2) \rightarrow (1,4) $
- $ (1,2) \rightarrow (2,3) \rightarrow (1,4) $
- $ (1,2) \rightarrow (2,3) \rightarrow (2,4) $
- $ (2,3) \rightarrow (1,4) $
- $ (2,3) \rightarrow (2,4) $
$ x $ の遷移が完全に一致していても、 $ i $ の選び方が異なる方法は区別して数え上げることに注意してください。
### Constraints
- $ 1 \le N \le 24 $
- $ 1 \le M \le \min(2^N,2 \times 10^5) $
- $ 0 \le s_1 < s_2 < \dots < s_M < 2^N $