#AGC020E. [AGC020E] Encoding Subsets

[AGC020E] Encoding Subsets

题目描述

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

  • 文字列 01 はそれぞれ 01 とエンコードできる。
  • 文字列 A A B B をそれぞれ P P Q Q とエンコードできる場合、文字列 AB AB PQ PQ とエンコードできる。
  • 文字列 A A P P とエンコードできる場合、K  2 K\ \geq\ 2 を正の整数として、文字列 AA...A AA...A A A K K 個連結したもの)を (P P xK K ) とエンコードできる。

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

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

  • A A B B は長さが等しく、どちらも 01 からなる。
  • Ai A_i = 1 であるようなすべての添字 i i に対して、Bi B_i = 1 でもある。

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

输入格式

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

S S

输出格式

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

题目大意

我们定义一个 01 串的压缩是满足如下方式的字符串变化过程:

  • 00,110\rightarrow 0,1\rightarrow 1
  • 如果 AP,BQA\rightarrow P,B\rightarrow Q 合法,那么 A+BP+QA+B\rightarrow P+Q 也合法(其中 ++ 代表字符串拼接)
  • 如果 S=A+A++An(n2)S=\underbrace{A+A+\cdots+A}_{n\text{个}(n\ge 2)},那么 S(A×n)S\rightarrow(A\times n) 也合法(其中 (, ), × 为字符,nn 为数字,算作一个字符,即使其中有 0/10/1

我们同时定义 0101BBAA 的子集当且仅当:

  • A=B|A|=|B|
  • Bi=1,Ai=1\forall B_i=1,A_i=1

现在给你一个 0101SS,问它所有的子集的合法变化结果数的总和为多少。

答案对 998244353998244353 取模。

011
9
0000
10
101110
156
001110111010110001100000100111
363383189

提示

制約

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

Sample Explanation 1

S S のサブセットは 4 4 個存在し、 - 0110110(1x2) とエンコードできます。 - 010010 とエンコードできます。 - 001001(0x2)1 とエンコードできます。 - 0000000(0x2)(0x2)0(0x3) とエンコードできます。 したがって、S S のすべてのサブセットについてのエンコード方法の個数の総和は 2 + 1 + 2 + 4 = 9 2\ +\ 1\ +\ 2\ +\ 4\ =\ 9 通りです。

Sample Explanation 2

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

Sample Explanation 4

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