F - Binary String Generators
問題文
0,1,? からなる長さ $N$ の文字列が $M$ 個与えられます。 $i$ $(1 \le i \le M)$ 番目の文字列を $S_i$ とします。
$1 \le i \le M$ を満たす $i$ を $1$ つ選び、 $S_i$ に含まれる各 ? を独立に 0 または 1 に置き換えて、 0,1 からなる長さ $N$ の文字列 $T$ を作ります。
この方法で作ることができる 0,1 からなる長さ $N$ の文字列 $T$ は、重複を除いて全部で何通りありますか?
形式的な説明
(この説明は、問題文の内容をより厳密に定義するためのものです。通常は問題文本文だけを読めば十分です。)
$S_i$ から作ることができる 0,1 からなる長さ $N$ の文字列 $T$ は、すべての位置 $j$ $(1 \le j \le N)$ について、次の条件を満たします。
- $S_i$ の $j$ 文字目が
0なら、$T$ の $j$ 文字目も0である - $S_i$ の $j$ 文字目が
1なら、$T$ の $j$ 文字目も1である - $S_i$ の $j$ 文字目が
?なら、$T$ の $j$ 文字目は0,1のどちらでもよい
$1 \le i \le M$ を満たす少なくとも $1$ つの $i$ について $S_i$ から作れるような、0,1 からなる長さ $N$ の文字列 $T$ は全部で何通りあるかを求めてください。
つまり、同じ文字列 $T$ が複数の $S_i$ から作れる場合でも、その文字列は答えでは $1$ 通りとして数えます。
より形式的には、各 $i$ について、集合 $A_i$ を次のように定義します。
$A_i$ は、$S_i$ から作ることができる長さ $N$ の 0,1 文字列 $T$ 全体の集合です。ここで $T$ は、$S_i$ の 0,1 が書かれている位置ではその文字と一致し、? が書かれている位置では 0,1 のどちらでもよいものとします。
$$A_i:=\left\lbrace T\in\left\lbrace\colorbox{lightgray}{\color{black}\texttt{0}},\colorbox{lightgray}{\color{black}\texttt{1}}\right\rbrace^N\mathrel{}\middle|\mathrel{}\forall j\ (1 \le j \le N),\ S_i[j]\ne \colorbox{lightgray}{\color{black}\texttt{?}}\Rightarrow T[j]=S_i[j]\right\rbrace.$$
ここで $\colorbox{lightgray}{\color{black}\texttt{0}},\colorbox{lightgray}{\color{black}\texttt{1}},\colorbox{lightgray}{\color{black}\texttt{?}}$ は文字、 $S_i[j]$ は $S_i$ の $j$ 文字目、 $T[j]$ は $T$ の $j$ 文字目を表します。
求める値は、次の和集合の要素数です。
$$\left|A_1\cup A_2\cup\cdots\cup A_M\right|.$$
つまり、同じ文字列 $T$ が複数の集合 $A_i$ に含まれる場合でも、和集合の要素としては $1$ 個として数えます。
制約
- $1 \leq N \leq 60$
- $1 \leq M \leq 100$
- $0 \leq K \leq 400$ (ただし、 $K$ は $S _ 1,S _ 2,\ldots ,S _ M$ に含まれる
?の総数) - $N,M$ は整数
- $S_i$ は
0,1,?からなる長さ $N$ の文字列
入力
$N$ $M$
$S _ 1$
$S _ 2$
$\vdots$
$S _ M$
出力
何通りの文字列が作れるかを整数で出力してください。
3 3
000
101
1??
5
000,100,101,110,111 の $5$ 通りが作れます。
5 5
0000?
000?0
00?00
0?000
?0000
6
00000,00001,00010,00100,01000,10000 の $6$ 通りが作れます。
60 1
????????????????????????????????????????????????????????????
1152921504606846976
答えは $2^{60}$ に等しいです。
59 9
11111111111111111111111111111111111111111111111111111111111
?1?0???0?0000???0000?0000??0000???000???0000??000??0???0?1?
11?0???0?0???0?0?????0???0?0???0?0???0?0?????0???0?00??0?11
?1?0???0?0???0?0?????0???0?0???0?0???0?0?????0???0?0?0?0?1?
11?0???0?0000??0?????0000??0000??0???0?0?????0???0?0??00?11
?1??0?0??0?0???0?????0?????0?0???0???0?0?????0???0?0???0?1?
11??0?0??0??0??0?????0?????0??0??0???0?0?????0???0?0???0?11
?1???0???0???0??0000?0?????0???0??000???0000??000??0???0?1?
11111111111111111111111111111111111111111111111111111111111
6400315125761
59 13
11111111111111111111111111111111111111111111111111111111111
0???0?0???0??000??0000??0000???000???0000??000??0???0?0000?
0??0???0?0??0???0?0???0?0???0?0???0?0?????0???0?00?00?0???0
000?????0???0???0?0000??0000??0???0?0?????00000?0?0?0?0000?
0??0????0???0???0?0?????0??0??0???0?0?????0???0?0???0?0????
0???0???0????000??0?????0???0??000???0000?0???0?0???0?0????
11111111111111111111111111111111111111111111111111111111111
???????000???000???000???000??00000??000???0000?00000??????
??????0???0?0??00?0???0?0?????0?????0???0?0???????0????????
?????????0??0?0?0????0??0000??0000??00000??000????0????????
???????00???00??0??00???0???0?0?????0???0?????0???0????????
??????00000??000??00000??000??00000?0???0?0000????0????????
11111111111111111111111111111111111111111111111111111111111
114204101240833