atcoder#ABC292G. [ABC292G] Count Strictly Increasing Sequences

[ABC292G] Count Strictly Increasing Sequences

配点 : 600600

問題文

数字( 0123456789 )と ? からなる長さ MM の文字列の列 S1,,SNS_1,\ldots,S_N が与えられます。

? を独立に数字に置き換える方法は 10q(q10^q(qS1,,SNS_1,\ldots,S_N に含まれる ? の個数の合計)) 通りありますが、そのうち置き換え後の文字列をそれぞれ整数値とみなしたときに S1<S2<<SNS_1\lt S_2 \lt \ldots \lt S_N が成り立つようなものが何通りあるかを 998244353998244353 で割った余りを求めてください。

なお、? を置き換えた後の SiS_i は先頭に 11 個以上の 0 が連続していても構いません。例えば、0000000292 を整数値とみなすと 292292 となります。

制約

  • 2N402 \leq N \leq 40
  • 1M401 \leq M \leq 40
  • N,MN,M は整数
  • SiS_i は数字と ? からなる長さ MM の文字列

入力

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

NN MM

S1S_1

\vdots

SNS_N

出力

答えを出力せよ。

3 2
?0
??
05
4

条件を満たす置き換え方は以下の 44 通りです。

  • S1S_111 文字目の ?0 に、S2S_21,21,2 文字目の ? をそれぞれ 0, 1 に置き換える。
  • S1S_111 文字目の ?0 に、S2S_21,21,2 文字目の ? をそれぞれ 0, 2 に置き換える。
  • S1S_111 文字目の ?0 に、S2S_21,21,2 文字目の ? をそれぞれ 0, 3 に置き換える。
  • S1S_111 文字目の ?0 に、S2S_21,21,2 文字目の ? をそれぞれ 0, 4 に置き換える。
2 1
0
0
0
10 10
1?22??37?4
1??8?0??49
3?02??8044
51?4?8?7??
5?9?20???2
68?7?6?800
?3??2???23
?442312158
??2??921?8
????5?96??
137811792

答えを 998244353998244353 で割った余りを求めてください。