AT_arc164_d [ARC164D] 1D Coulomb

Description

[problemUrl]: https://atcoder.jp/contests/arc164/tasks/arc164_d 長さ $ 2N $ で `+` , `-` が $ N $ 個ずつからなる文字列 $ s $ に対して次の問題を考え、その答えを $ p(s) $ と書くことにします。 > 数直線上の $ x=1,2,3,\ldots\ ,\ 2N $ の位置に $ 2N $ 個のボールが並んでおり、そのうち $ N $ 個は $ +1 $ の、残りの $ N $ 個は $ -1 $ の電荷を持ちます。ボールの持つ電荷の並び方は $ s $ によって表され、$ s $ の $ i $ 文字目が `+` であれば $ x=i $ には $ +1 $ の電荷を持つボールが、`-` であれば $ x=i $ には $ -1 $ の電荷を持つボールが配置されていることを表します。 > > それぞれのボールは、次の規則にしたがって、一斉に運動を始めます。ただし、数直線上でより小さい数が位置する方向を左、より大きい数が位置する方向を右と呼びます。 > > - 各ボールに対して、各時点で $ F $ を次の式で定める > $ F=\lbrace $ $ ( $自身より真に左に存在するボールの電荷の総和$ ) $ $ - $ $ ( $自身より真に右に存在するボールの電荷の総和$ ) $ $ \rbrace $ $ \times $ $ ( $自身の電荷$ ) $ > - 各ボールは各時点で、$ F $ が正であれば右に、負であれば左に、毎秒 $ 1 $ の速さで動く > - 同時に同じ座標に電荷 $ +1 $ のボールと電荷 $ -1 $ のボールが存在した場合、両者は打ち消しあって消滅する > > このとき、それぞれのボールが運動を始めてから消滅するまでに移動した距離(消滅した座標と初めの座標の差の絶対値)の総和はいくつでしょうか。 長さ $ 2N $ で、`+` , `-` , `?` からなる文字列 $ T $ が与えられます。$ T $ の `?` を `+` または `-` に置換することで得られる、 `+` , `-` が $ N $ 個ずつからなる文字列 $ s $ 全てについての $ p(s) $ の総和を $ 998244353 $ で割った余りを求めてください。 なお、与えられた制約と運動の規則の下で、有限の時間内に全てのボールが消滅すること、ボールが消滅しない限り各ボールの $ F $ の値が $ 0 $ にならないこと、$ 3 $ つ以上のボールが同時に同じ座標に位置する瞬間が無いこと、および $ p(s) $ が整数になることが示せます。

Input Format

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

Output Format

答えを $ 998244353 $ で割った余りを整数で出力せよ。

Explanation/Hint

### 制約 - $ 1\leq\ N\leq\ 3000 $ - $ N $ は整数である - $ |T|=2N $ - $ T $ の各文字は `+` , `-` , `?` のいずれかであり、 `+` と `-` はそれぞれ $ N $ 個以下である ### Sample Explanation 1 $ T $ から得られる文字列 $ s $ として、 `++--` と `+-+-` が考えられます。 `++--` について、運動を開始した時点では各ボールの左右の電荷の総和、および $ F $ の値は次のようになります。 !\[\](https://img.atcoder.jp/arc164/403850a82c3adfb838197734344ae193.png) したがって、$ x=1,2 $ のボールは右に、$ x=3,4 $ のボールは左に動き始めます。 この場合、各ボールはその後運動の向きを変えることなく、 $ 0.5 $ 秒後に $ x=2,3 $ にあったボールが $ x=2.5 $ で、$ 1.5 $ 秒後に $ x=1,4 $ にあったボールが $ x=2.5 $ でそれぞれ消滅します。 この間に、$ x=2,3 $ にあったボールは $ 0.5 $ ずつ、$ x=1,4 $ にあったボールは $ 1.5 $ ずつの距離を移動しているため、$ p( $ `++--` $ )=4 $ です。 同様に観察すると $ p( $ `+-+-` $ )=2 $ であることが分かるため、求める $ p(s) $ の総和は $ 6 $ となります。 ### Sample Explanation 2 $ p(s) $ の総和を $ 998244353 $ で割った余りを出力してください。