O - Equidistant Binary String Editorial

Time Limit: 6 sec / Memory Limit: 1024 MB

配点 : 500{500}

問題文

Sn,mS_{n,m}nn 文字の 0mm 文字の 1 からなる長さ n+mn+m の文字列全体の集合とします。

s1,s2Sn,ms_1, s_2\in S_{n,m} に対して、 s1,s2s_1, s_2 の距離 d(s1,s2)d(s_1, s_2) を「隣り合った 22 文字を入れ替える操作によって文字列 s1s_1 を文字列 s2s_2 に並び替えるのに必要な最小の操作回数」と定義します。

また、 s1,s2Sn,ms_1, s_2\in S_{n,m} に対して、f(s1,s2)f(s_1,s_2) を次で定めます。

  • d(s1,t)=d(s2,t)d(s_1,t)=d(s_2,t) となる文字列 tSn,mt\in S_{n,m} が存在するとき、そのような文字列の中で辞書順最小のものを返す。そのような文字列が存在しないときは 1-1 を返す。

正整数 n,mn,m と文字列 TSn,mT \in S_{n,m} が与えられます。 f(s1,s2)=Tf(s_1,s_2)=T となるような文字列の組 (s1,s2) (s1,s2Sn,m)(s_1,s_2)\ (s_1, s_2\in S_{n,m}) はいくつありますか? 998244353998244353 で割った余りを求めてください。

制約

  • 1n,m301\leq n,m\leq 30
  • n,mn,m は整数
  • TSn,mT\in S_{n,m}

入力

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

nn mm
TT

出力

答えを 998244353998244353 で割った余りを出力せよ。


入力例 1Copy

Copy
2 2
0101

出力例 1Copy

Copy
4

(s1,s2)=((s_1,s_2)=( 0011 ,, 0110 ),(),(0011 ,, 1001 ),(),( 0110 ,, 0011 ),(),( 1001 , 0011 )) が条件を満たします。

例えば、 (s1,s2)=((s_1,s_2)=( 0011 ,, 0110 )) について、d(s1,t)=d(s2,t)d(s_1, t)=d(s_2, t) を満たす tS2,2t\in S_{2,2}01011001 がありますが、このうち辞書順で小さいものは 0101 であるため、f(s1,s2)=f(s_1, s_2)= 0101 です。


入力例 2Copy

Copy
4 1
00100

出力例 2Copy

Copy
4

(s1,s2)=((s_1,s_2)=( 00001 ,, 10000 ),(),(00010 ,, 01000 ),(),( 01000 ,, 00010 ),(),( 10000 , 00001 )) が条件を満たします。


入力例 3Copy

Copy
3 3
111000

出力例 3Copy

Copy
0

入力例 4Copy

Copy
6 4
0001111000

出力例 4Copy

Copy
1254


2025-04-14 (Mon)
09:36:27 +00:00