#agc020e. [agc020_e]Encoding Subsets
[agc020_e]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
からなる。
入力
入力は標準入力から以下の形式で与えられる。
出力
のすべてのサブセットについてのエンコード方法の個数の総和を で割ったあまりを出力せよ。
入力例 1
011
出力例 1
9
のサブセットは 個存在し、
011
は011
、0(1x2)
とエンコードできます。010
は010
とエンコードできます。001
は001
、(0x2)1
とエンコードできます。000
は000
、0(0x2)
、(0x2)0
、(0x3)
とエンコードできます。
したがって、 のすべてのサブセットについてのエンコード方法の個数の総和は 通りです。
入力例 2
0000
出力例 2
10
今回は のサブセットは 個しか存在しませんが、 通りの方法でエンコードできます。
入力例 3
101110
出力例 3
156
入力例 4
001110111010110001100000100111
出力例 4
363383189
結果を で割ったあまりを出力することを忘れずに。