atcoder#AGC037B. [AGC037B] RGB Balls

[AGC037B] RGB Balls

配点 : 800800

問題文

色のついたボールが 3N3N 個あり、それぞれには 11 から 3N3N の番号がついています。 各ボールの色は長さ 3N3N の文字列 SS によって表されており、ボール ii の色は SiS_iR のとき赤色、G のとき緑色、B のとき青色です。 赤色のボール、緑色のボール、青色のボールはそれぞれ NN 個ずつあります。

高橋君はこの 3N3N 個のボールを、各人が赤、青、緑のボールを 11 つずつ割り当てられるよう、NN 人の人に分配することにしました。 ただし、ボールをもらう人たちはできるだけ近い番号のボールが欲しいので、高橋君はさらに以下の条件をみたすように分配することにしました。

  • jj 番目の人が受け取ったボールの番号を小さい順に aj<bj<cja_j < b_j < c_j とする。
  • このとき j(cjaj)\sum_j (c_j-a_j) ができるだけ小さくなるように分配する。

高橋君がボールを分配する方法は何通りあるか求めてください。 答えは非常に大きくなることがあるので、998244353998244353 で割ったあまりを求めてください。 ただし、22 つのボールの分配方法が異なるとは、ある人が存在して、その人が受け取ったボールの集合が異なることを指します。

制約

  • 1N1051 \leq N \leq 10^5
  • S=3N|S|=3N
  • SSR, G, B のみからなり、それぞれ NN 回ずつ SS に登場する

入力

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

NN

SS

出力

高橋君のボールの分配方法が何通りあるかを 998244353998244353 で割ったあまりを出力せよ。

3
RRRGGGBBB
216

例えば以下のようにボールを分配したとき、j(cjaj)\sum_j (c_j-a_j) の値が 1818 となり最小となります。

  • 11 番目の人にボール 1,5,91,5,9 を渡す。
  • 22 番目の人にボール 2,4,82,4,8 を渡す。
  • 33 番目の人にボール 3,6,73,6,7 を渡す。
5
BBRGRRGRGGRBBGB
960