atcoder#AGC055D. [AGC055D] ABC Ultimatum

[AGC055D] ABC Ultimatum

配点 : 12001200

問題文

A, B, C をそれぞれちょうど NN 個ずつ含む長さ 3N3N の文字列 TT が次の条件を満たすとき、TT良い文字列と呼びます: TTNN 個の長さ 33 の(連続とは限らない)部分列に分解する方法であって、各部分列が ABC, BCA, CAB のいずれかであるような方法が存在する。

A, B, C, ? からなる長さ 3N3N の文字列 SS が与えられます。各 ?A, B, C のいずれかに置き換える方法であって、結果が良い文字列となるようなものの個数を求めてください。この個数は非常に大きい可能性があるため、これを 998244353998244353 で割った余りを出力してください。

制約

  • 1N151\le N \le 15
  • SS は、A, B, C, ? からなる長さ 3N3N の文字列である。

入力

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

NN

SS

出力

答えを 998244353998244353 で割った余りを出力せよ。

1
???
3

得られる良い文字列は、ABC, BCA, CAB33 個です。

2
AA????
2

得られる良い文字列は、AABBCC, AABCBC22 個です。

3
?A?A?A?A?
0

A が既に 44 個含まれるため、良い文字列を得ることはできません。

9
?????????A??B??C???????????
331653164