AT_s8pc_3_c XORパズル
Description
[problemUrl]: https://atcoder.jp/contests/s8pc-3/tasks/s8pc_3_c
### サンプルケース3に不備があったので、リジャッジをしました。申し訳ございません。(21:01)
square1001は, Atcoder社から長さ $ n $ の数列 $ a $ をもらいました。$ a $ の要素はすべて異なります。
彼は, 数列 $ b $ を作りましたが, この数列を覚えていません。しかし, 次のことは覚えています。 - $ b $ の要素はすべて異なる。
- $ b $ の要素はすべて $ a $ にも入っている。
- square'1001' は, 2進数が好きなため, $ b_1\ \oplus\ b_2\ \oplus\ \cdots\ \oplus\ b_r\ =\ k $ ($ r $ は数列 $ b $ の長さ) であることも覚えている。\[$ \oplus $ は XOR\]
square1001は, 数列 $ b $ として考えられるものが何通りあるのか考えることにしました。
しかし, 彼は全探索をしようとしていて, これに気付いたあなたは, 彼の代わりに求めてあげようとしました。
そのとき, square'1001'が作った数列 $ b $ として考えられるものは, 何通りあるでしょうか?
ただし, 答えが非常に大きくなることがあるので, $ 1,000,000,007 $で割った余りを求めてください。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ n\ k $ $ a_1\ a_2\ \cdots\ a_n $
- $ 1 $ 行目には、数列$ a $の長さ$ n $と、数列$ b $のXORした値$ k $が空白区切りで与えられる。
- $ 2 $ 行目には、数列$ a $の要素が空白区切りで与えられる。
Output Format
出力は以下の形式で標準出力に従うこと。
- square'1001'が作った数列として考えられるものの通り数を1行に出力せよ。
- ただし, $ 1,000,000,007 $ で割った余りを出力すること。
Explanation/Hint
### 制約
- $ 1\ \le\ n\ \le\ 100 $
- $ 1\ \le\ a_i,\ k\ \le\ 255 $
- $ i\ \neq\ j\ \Rightarrow\ a_i\ \neq\ a_j $
### 小課題
小課題1 \[ $ 50 $ 点 \]
- $ 1\ \le\ n\ \le\ 4 $ を満たす。
小課題2 \[ $ 170 $ 点 \]
- $ 1\ \le\ n\ \le\ 20 $ を満たす。
小課題3 \[ $ 180 $ 点 \]
- $ 1\ \le\ n\ \le\ 100 $ を満たす。
### Sample Explanation 1
数列 $ b $ として考えられるのは, $ b\ =\ \{\ 1\ \},\ \{\ 2,\ 3\ \},\ \{\ 3,\ 2\ \} $ の3つである。
### Sample Explanation 2
数列 $ b $ として考えられるのは, $ b\ =\ \{\ 5,\ 7,\ 8\ \},\ \{\ 5,\ 8,\ 7\ \},\ \{\ 7,\ 5,\ 8\ \},\ \{\ 7,\ 8,\ 5\ \},\ \{\ 8,\ 5,\ 7\ \},\ \{\ 8,\ 7,\ 5\ \} $ の6つである。
### Sample Explanation 3
$ 1,000,000,007 $ で割った余りを求めること。