O - Three Constraints 解説 /

実行時間制限: 2 sec / メモリ制限: 1024 MiB

配点 : 100

問題文

非負整数 x, y, z に対し、 以下の条件をすべて満たす非負整数の組 (a,b,c) の個数を f(x, y, z) と定めます。

  • a \ \mathrm{AND} \ b \ \mathrm{AND} \ c = x
  • a \ \mathrm{OR} \ b \ \mathrm{OR} \ c = y
  • a + b + c = z

ここで a \ \mathrm{AND} \ b ab のビットごとの論理積を表し、a \ \mathrm{OR} \ b ab のビットごとの論理和を表します。

正整数 N, M と、 0, 1, ? からなる長さ N の文字列 X,Y,Z が与えられます。

X?0 または 1 に置き換えて得られる文字列を 2 進数の整数と解釈したものとしてあり得る整数全体の集合を S_X とおきます。Y に対する S_YZ に対する S_Z も同様に定義します。

k = 0, 1, \ldots, M-1 について、以下の問題を解いてください。

  • x \in S_X, y \in S_Y, z \in S_Z を満たす整数の 3 つ組 (x, y, z) であって、f(x, y, z) \equiv k \pmod{M} を満たすものが存在するか判定せよ。

T 個のテストケースが与えられるので、それぞれについて解いてください。

制約

  • 1 \leq T \leq 3000
  • 1 \leq N \leq 3000
  • 1 \leq M \leq 10^6
  • X, Y, Z0, 1 , ? からなる長さ N の文字列
  • すべてのテストケースにおける N の総和は {3000} 以下
  • すべてのテストケースにおける M の総和は 10^6 以下
  • N,M は整数

入力

入力は以下の形式で標準入力から与えられる。

T
\mathrm{case}_1
\mathrm{case}_2
\vdots
\mathrm{case}_T

各テストケースは以下の形式で与えられる。

N\ M
X
Y
Z

出力

T 行出力せよ。i 行目には \mathrm{case}_i について、k = 0, 1, \ldots, M-1 の順に f(x, y, z) \equiv k \pmod{M} なる (x,y,z) が存在するならば 1 、そうでないならば 0 を出力せよ。


入力例 1

3
3 5
0?1
?01
?11
5 7
?0???
?0?1?
01?10
10 10
0000000000
0000000000
0000000000

出力例 1

11010
1011001
0100000000

1 番目のテストケースについて、S_x = \lbrace 1,3 \rbrace , S_y = \lbrace 1,5 \rbrace , S_z = \lbrace 3,7 \rbrace になります。 k = 0,1,3 について、

  • f(3, 1, 3) \equiv 0 \pmod{M} : 条件を満たす (a,b,c) の組は存在しません。

  • f(1, 1, 3) \equiv 1 \pmod{M} : 条件を満たす (a,b,c)(1,1,1)1 つです。

  • f(1, 5, 7) \equiv 3 \pmod{M} : 条件を満たす (a,b,c)(1,1,5) , (1,5,1) , (5,1,1)3 つです。

のように条件を満たす (x,y,z) が存在することがわかります。

一方、 k = 2,4 について条件を満たすような (x,y,z) は存在しません。