C - Count Me Editorial /

Time Limit: 5 sec / Memory Limit: 1024 MB

配点 : 100

シマウマの縞は一世代ごとに一か所が増えるという伝説があるので,その変化の過程を数えてください.

問題文

文字 0, 1, ? からなる長さ N の文字列 S が与えられる.文字列の N + 1 個組 (t_0, t_1, \ldots, t_N) であって以下の条件をすべて満たすものの個数を 998244353 で割った余りを求めよ:

  • t_0 は空文字列である.
  • i = 0, 1, \ldots, N - 1 に対し,t_{i+1} は,t_i0 または 11 個いずれかの場所に挿入して得られる文字列である.
  • t_N は,S に現れる ? をそれぞれ 0 または 1 で置き換えて得られる文字列である.

制約

  • 1 \le N \le 250\,000
  • S0, 1, ? からなる長さ N の文字列である.

部分点

  • N \le 5\,000 を満たすデータセットに正解した場合は,10 点が与えられる.
  • 追加制約のないデータセットに正解した場合は,上記とは別に 90 点が与えられる.

入力

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

N
S

出力

個数を 998244353 で割った余りを出力せよ.


入力例 1

3
01?

出力例 1

8

条件を満たす組 (t_0, t_1, t_2, t_3) は以下の 8 個である:

  • t_0 が空文字列,t_10t_200t_3010
  • t_0 が空文字列,t_10t_201t_3010
  • t_0 が空文字列,t_10t_201t_3011
  • t_0 が空文字列,t_10t_210t_3010
  • t_0 が空文字列,t_11t_201t_3010
  • t_0 が空文字列,t_11t_201t_3011
  • t_0 が空文字列,t_11t_210t_3010
  • t_0 が空文字列,t_11t_211t_3011

入力例 2

9
0??001011

出力例 2

32400

入力例 3

40
1111111111111111111100000000000000000000

出力例 3

88808106