問題一覧 > 通常問題

No.2291 Union Find Estimate

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 96
作問者 : t98slidert98slider / テスター : 箱星箱星
0 ProblemId : 9136 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2023-11-18 08:07:42

問題文

ゆきこちゃんは0から9までの10種類の数字からなる $W$ 桁の暗証番号を設定しましたが、忘れてしまいました。
そこで $H$ 回のお問い合わせで暗証番号に関するヒントを得ました。
お問い合わせで得られた返信はそれぞれ0から9aからz?の 37種類の文字種からなる $W$ 文字で構成される文字列です。
$i$ ($1 \leq i \leq H $) 回目のお問い合わせの返信を $Q_{i}$ とし、$ i $ 回目のお問い合わせの返信の $j$ ($1 \leq j \leq W$) 文字目を $Q_{i,j}$ とします。
$Q_{i, j}$ はそれぞれ以下の情報を持ちます。

  • $Q_{i,j}$ に 0から9までの数字が書かれていた場合
    暗証番号の左から $j$ 桁目がその数字であることを意味します。
  • $Q_{i,j}$ に aからzまでのアルファベットが書かれていた場合
    $i$ 回目のお問い合わせの返信において $Q_{i,j} = Q_{i, k}$ となる $k$ について暗証番号の左から $j$ 桁目と左から $k$ 桁目が同じ数字であることを意味します。
  • $Q_{i,j}$ に ?が書かれていた場合
    $i$ 回目のお問い合わせの返信で暗証番号の左から $j$ 桁目に関する情報が与えられていないことを意味します。
$i$ ($1 \leq i \leq H $) 行目に $i$ 回目のお問い合わせの返信を受け取った段階で、暗証番号として考えられるものが何通りあるか $\bmod\ 998244353$ で出力してください。
なお、$i$ 回目のお問い合わせについて $j < i$ を満たす $j$ 回目のお問い合わせの情報が引き継がれているものとします。

入力

$W\ H$
$Q_{1}$
$Q_{2}$
$Q_{3}$
$\ \vdots$
$Q_{i}$
$\ \vdots$
$Q_{H}$

  • $1\leq W, H \leq 2 \times 10^{5} $
  • $1\leq W \times H \leq 2 \times 10^{5}$
  • $W, H$ は整数である。
  • $1 \leq i \leq H$ について $|Q_{i}| = W$ を満たす。
  • $Q_{i}$ は0から9aからz?のいずれか37種類の文字から成る文字列である。

出力

$i$ ($1 \leq i \leq H $) 行目に $i$ 回目のお問い合わせの返信を受け取った段階で、暗証番号として考えられるものが何通りあるか $\bmod\ 998244353$ で出力してください。最後に改行してください。

サンプル

サンプル1
入力
3 4
???
b1b
cc?
??2
出力
1000
10
1
0

  • 1回目のお問い合わせでは、何の情報も得られませんでした。000999までの1000通りの暗証番号が考えられるため1000を出力します。
  • 2回目のお問い合わせでは、左から1桁目と3桁目が等しく、左から2桁目が1であるという情報が得られました。
    010111212313414515616717818919
    の10通りの暗証番号が考えられるため10を出力します。
  • 3回目のお問い合わせでは、左から1桁目と2桁目が等しいという情報が得られました。2回目のお問い合わせの内容と合わせると、暗証番号は111の1通りに定まるため1を出力します。
  • 4回目のお問い合わせでは、左から3桁目が2であるという情報が得られました。これまでの情報と合わせると、2桁目が1であるという情報と矛盾することになるので暗証番号として考えられるものは0通りとなります。よって、0を出力します。

サンプル2
入力
13 7
6qwfrtydfhjsf
6d?lghjknlmca
?df??1??????1
?q??fg?2????g
?3zxcvbnmasdf
6?aaa??2????1
?????z???zbed
出力
17556470
1755647
10000000
1000000
100000
1000
1000

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。