atcoder#AGC020E. [AGC020E] Encoding Subsets

[AGC020E] Encoding Subsets

配点 : 14001400

問題文

次のような、01 からなる文字列をエンコードする規則を考えます。

  • 文字列 01 はそれぞれ 01 とエンコードできる。
  • 文字列 AABB をそれぞれ PPQQ とエンコードできる場合、文字列 ABABPQPQ とエンコードできる。
  • 文字列 AAPP とエンコードできる場合、K2K \geq 2 を正の整数として、文字列 AA...AAA...AAAKK 個連結したもの)を (PPxKK) とエンコードできる。

例えば、文字列 00100100100100100100(1(0x2)x2)1(001x3) などとエンコードすることができ、この他のエンコード方法も存在します。

また、次の条件が満たされるとき、文字列 AA は文字列 BBサブセット であると呼びます。

  • AABB は長さが等しく、どちらも 01 からなる。
  • AiA_i = 1 であるようなすべての添字 ii に対して、BiB_i = 1 でもある。

01 からなる文字列 SS が与えられます。SS のすべてのサブセットについて、それぞれをエンコードする方法が何通り存在するか求め、それらの個数の総和を 998244353998244353 で割ったあまりを求めてください。

制約

  • 1S1001 \leq |S| \leq 100
  • SS01 からなる。

入力

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

SS

出力

SS のすべてのサブセットについてのエンコード方法の個数の総和を 998244353998244353 で割ったあまりを出力せよ。

011
9

SS のサブセットは 44 個存在し、

  • 0110110(1x2) とエンコードできます。
  • 010010 とエンコードできます。
  • 001001(0x2)1 とエンコードできます。
  • 0000000(0x2)(0x2)0(0x3) とエンコードできます。

したがって、SS のすべてのサブセットについてのエンコード方法の個数の総和は 2+1+2+4=92 + 1 + 2 + 4 = 9 通りです。

0000
10

今回は SS のサブセットは 11 個しか存在しませんが、1010 通りの方法でエンコードできます。

101110
156
001110111010110001100000100111
363383189

結果を 998244353998244353 で割ったあまりを出力することを忘れずに。