atcoder#ABC246H. [ABC246Ex] 01? Queries

[ABC246Ex] 01? Queries

配点 : 600600

問題文

01? のみからなる長さ NN の文字列 SS が与えられます。

また、QQ 個のクエリ (x1,c1),(x2,c2),,(xQ,cQ)(x_1, c_1), (x_2, c_2), \ldots, (x_Q, c_Q) が与えられます。 ここで、i=1,2,,Qi = 1, 2, \ldots, Q について、xix_i1xiN1 \leq x_i \leq N を満たす整数であり、cic_i01? のうちのいずれかの文字です。

i=1,2,,Qi = 1, 2, \ldots, Q の順に、クエリ (xi,ci)(x_i, c_i) に関して以下の処理を行ってください。

  1. まず、SS の先頭から xix_i 文字目を cic_i に変更する。
  2. その後、「 SS に含まれるすべての ? をそれぞれ独立に 0 または 1 に置き換えて得られる文字列の(連続とは限らない)部分列」としてあり得る空でない文字列の個数を、998244353998244353 で割ったあまりを出力する。

制約

  • 1N,Q1051 \leq N, Q \leq 10^5
  • N,QN, Q は整数
  • SS01? のみからなる長さ NN の文字列
  • 1xiN1 \leq x_i \leq N
  • cic_i01? のうちいずれかの文字

入力

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

NN QQ

SS

x1x_1 c1c_1

x2x_2 c2c_2

\vdots

xQx_Q cQc_Q

出力

QQ 行出力せよ。i=1,2,,Qi = 1, 2, \ldots, Q について、ii 行目には ii 番目のクエリ (xi,ci)(x_i, c_i) に対する答え(すなわち、問題文中の処理 2. における文字列の個数を 998244353998244353 で割ったあまり)を出力せよ。

3 3
100
2 1
2 ?
3 ?
5
7
10
  • 11 個目のクエリで、まず S=S = 110 に変更されます。S=S = 110 の部分列としてあり得る文字列は、01101111055 個です。よって、11 個目のクエリに対する答えとして 55 を出力します。
  • 22 個目のクエリで、まず S=S = 1?0 に変更されます。S=S = 1?0?0 または 1 に置き換えて得られる文字列は、10011022 つです。 これらのどちらかの部分列としてあり得る文字列は、0100101110011077 個です。よって、22 個目のクエリに対する答えとして 77 を出力します。
  • 33 個目のクエリで、まず S=S = 1?? に変更されます。S=S = 1???0 または 1 に置き換えて得られる文字列は、10010111011144 つです。 これらのいずれかの部分列としてあり得る文字列は、01000110111001011101111010 個です。よって、33 個目のクエリに対する答えとして 1010 を出力します。
40 10
011?0??001??10?0??0?0?1?11?1?00?11??0?01
5 0
2 ?
30 ?
7 1
11 1
3 1
25 1
40 0
12 1
18 1
746884092
532460539
299568633
541985786
217532539
217532539
217532539
573323772
483176957
236273405

998244353998244353 で割ったあまりを出力することに注意してください。