問題一覧 > 通常問題

No.2040 010-1 Deletion

レベル : / 実行時間制限 : 1ケース 3.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 33
作問者 : milkcoffeemilkcoffee / テスター : nok0nok0 rianoriano
5 ProblemId : 8119 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2022-08-09 18:13:03

問題文

0, 1 からなる文字列 $T$ が以下を満たすとき、$T$ を 良い文字列 とします。

  • $T$ に対して以下のいずれかを選んで操作を行うということを好きな回数行い、$T$ を空文字列にすることができる。
    • $T$ の中にある 1 という文字列を削除する。削除した後、その前後をつなげた文字列を新たに $T$ とする。
    • $T$ の中にある 010 という文字列を削除する。削除した後、その前後をつなげた文字列を新たに $T$ とする。

例えば、011001011010 は良い文字列ですが、0000001 は良い文字列ではありません。

0, 1, ? からなる長さ $N$ の文字列 $S$ が与えられます。
?0, 1 に置き換える方法であって、結果が良い文字列となるようなものの個数を $998244353$ で割った余りを求めてください。

入力

$N$
$S$

  • $1 \leq N \leq 1500$
  • $N$ は整数
  • $S$ は 0, 1, ? からなる長さ $N$ の文字列

出力

答えを $998244353$ で割った余りを整数で出力してください。

サンプル

サンプル1
入力
6
010???
出力
3

010010, 010100, 010111 としたときのみ良い文字列となります。

サンプル2
入力
4
000?
出力
0

良い文字列を作ることはできません。

サンプル3
入力
1
?
出力
1

サンプル4
入力
40
???0????1???????1??????0????1???????1???
出力
883469710

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