atcoder#AGC020E. [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
結果を で割ったあまりを出力することを忘れずに。