#R020E. [AGC020E] Encoding Subsets
[AGC020E] Encoding Subsets
配点 : 点
問題文
次のような、0 と 1 からなる文字列をエンコードする規則を考えます。
- 文字列
0、1はそれぞれ0、1とエンコードできる。 - 文字列 、 をそれぞれ 、 とエンコードできる場合、文字列 を とエンコードできる。
- 文字列 を とエンコードできる場合、 を正の整数として、文字列 ( を 個連結したもの)を
(x)とエンコードできる。
例えば、文字列 001001001 は 001001001、00(1(0x2)x2)1、(001x3) などとエンコードすることができ、この他のエンコード方法も存在します。
また、次の条件が満たされるとき、文字列 は文字列 の サブセット であると呼びます。
- と は長さが等しく、どちらも
0と1からなる。 - =
1であるようなすべての添字 に対して、 =1でもある。
0 と 1 からなる文字列 が与えられます。 のすべてのサブセットについて、それぞれをエンコードする方法が何通り存在するか求め、それらの個数の総和を で割ったあまりを求めてください。
制約
- は
0と1からなる。
入力
入力は標準入力から以下の形式で与えられる。
出力
のすべてのサブセットについてのエンコード方法の個数の総和を で割ったあまりを出力せよ。
011
9
のサブセットは 個存在し、
011は011、0(1x2)とエンコードできます。010は010とエンコードできます。001は001、(0x2)1とエンコードできます。000は000、0(0x2)、(0x2)0、(0x3)とエンコードできます。
したがって、 のすべてのサブセットについてのエンコード方法の個数の総和は 通りです。
0000
10
今回は のサブセットは 個しか存在しませんが、 通りの方法でエンコードできます。
101110
156
001110111010110001100000100111
363383189
結果を で割ったあまりを出力することを忘れずに。