#agc055d. [agc055_d]ABC Ultimatum
[agc055_d]ABC Ultimatum
問題文
A
, B
, C
をそれぞれちょうど 個ずつ含む長さ の文字列 が次の条件を満たすとき、 を良い文字列と呼びます: を 個の長さ の(連続とは限らない)部分列に分解する方法であって、各部分列が ABC
, BCA
, CAB
のいずれかであるような方法が存在する。
A
, B
, C
, ?
からなる長さ の文字列 が与えられます。各 ?
を A
, B
, C
のいずれかに置き換える方法であって、結果が良い文字列となるようなものの個数を求めてください。この個数は非常に大きい可能性があるため、これを で割った余りを出力してください。
制約
- は、
A
,B
,C
,?
からなる長さ の文字列である。
入力
入力は以下の形式で標準入力から与えられる。
出力
答えを で割った余りを出力せよ。
入力例 1
1
???
出力例 1
3
得られる良い文字列は、ABC
, BCA
, CAB
の 個です。
入力例 2
2
AA????
出力例 2
2
得られる良い文字列は、AABBCC
, AABCBC
の 個です。
入力例 3
3
?A?A?A?A?
出力例 3
0
A
が既に 個含まれるため、良い文字列を得ることはできません。
入力例 4
9
?????????A??B??C???????????
出力例 4
331653164