TSG LIVE! 14 プログラミングコンテスト
コンテスト日時
2025/05/25 (Su) 16:00 - 17:40

I - 01 Arbitrary Sorting

Earlgray
2
s
1024
MB
550

問題文

長さ $N$ の 01 からなる文字列 $S$ が与えられます。
以下の一連の操作をちょうど $1$ 回行うとき、操作の結果得られる文字列の総数を $998244353$ で割った余りを求めてください。
ただし、異なる操作から同じ文字列が得られた場合は重複して数えないものとします。

  1. 長さ $M\ge 1$ の整数列 $(t_1,t_2,\ldots,t_M)$ を $1\le t_1<t_2<\cdots<t_M\le N$ となるように選ぶ。
  2. $S$ の $t_1,t_2,\ldots,t_M$ 文字目を昇順にソートした文字列を $T$ とする。
  3. 全ての $i=1,2,\ldots,M$ について文字列 $S$ の $t_i$ 文字目を $T_i$ で置き換えた文字列を結果として返す。

制約

  • $1\le N\le 2\times 10^5$
  • $N$ は整数
  • $S$ は 01 からなる長さ $N$ の文字列

入力

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

$N$
$S$

出力

答えを $1$ 行で出力してください。

入力例 1
3 010
出力例 1
2

数列 $t_M$ を $(1), (2), (3), (1,2), (1,3)$ とすることで 010 が、
$(2,3), (1,2,3)$ とすることで 001 が得られます。

入力例 2
22 1110100110110001100101
出力例 2
4368
入力例 3
387 101100101110000110111110011101100111110011110001110000000011001010100100101010000011100111000111101100001010001001110011111011001101001100101101111110010010001100001101010001000111010000001010110001101100001011100101111100100111101000011011100110011001111011101010000010001011101110001010101110100111100100101001001100011001010011001011000010001111011010010100100101100000000111111110010
出力例 3
581514712
提出
C++23 (g++ 12.2.0)