[ABC104D] We Love ABC

题意翻译

给你一个字符串,只包含 'A', 'B', 'C', '?', 其中'?' 表示 'A', 'B', 'C' 中的任意一个,问在所有可能的 'A', 'B', 'C' 的字符串中,总共有多少长度为3的子序列是<'A', 'B', 'C'>。 答案对 $10 ^ 9 + 7$ 取模。

题目描述

[problemUrl]: https://atcoder.jp/contests/abc104/tasks/abc104_d 文字列 $ T $ の *ABC 数* とは、以下の条件をすべて満たす整数の組 $ (i,\ j,\ k) $ の個数です。 - $ 1\ <\ =\ i\ <\ j\ <\ k\ <\ =\ |T| $($ |T| $ は $ T $ の長さ) - $ T_i\ = $ `A`($ T_i $ は $ T $ の先頭から $ i $ 番目の文字) - $ T_j\ = $ `B` - $ T_k\ = $ `C` 例えば、$ T\ = $ `ABCBC` のとき、条件をすべて満たす組 $ (i,\ j,\ k) $ は $ (1,\ 2,\ 3),\ (1,\ 2,\ 5),\ (1,\ 4,\ 5) $ の $ 3 $ 個であるため、$ T $ の ABC 数は $ 3 $ です。 文字列 $ S $ が与えられます。$ S $ のそれぞれの文字は `A`, `B`, `C`, `?` のいずれかです。 $ S $ に含まれる `?` の個数を $ Q $ とします。$ S $ に含まれる `?` をそれぞれ `A`, `B`, `C` のいずれかに置き換えることで $ 3^Q $ 通りの文字列が作られます。これらの文字列すべての ABC 数の和を求めてください。 ただし、この和は非常に大きくなりうるため、和を $ 10^9\ +\ 7 $ で割った余りを出力してください。

输入输出格式

输入格式


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

输出格式


$ 3^Q $ 通りの文字列すべての ABC 数の和を $ 10^9\ +\ 7 $ で割った余りを出力せよ。

输入输出样例

输入样例 #1

A??C

输出样例 #1

8

输入样例 #2

ABCBC

输出样例 #2

3

输入样例 #3

????C?????B??????A???????

输出样例 #3

979596887

说明

### 制約 - $ 3\ <\ =\ |S|\ <\ =\ 10^5 $ - $ S $ のそれぞれの文字は `A`, `B`, `C`, `?` のいずれかである。 ### Sample Explanation 1 この場合、$ Q\ =\ 2 $ であり、`?` をそれぞれ `A`, `B`, `C` のいずれかに置き換えることで $ 3^Q\ =\ 9 $ 通りの文字列が作られます。これらの文字列それぞれの ABC 数を以下に示します。 - `AAAC`: $ 0 $ - `AABC`: $ 2 $ - `AACC`: $ 0 $ - `ABAC`: $ 1 $ - `ABBC`: $ 2 $ - `ABCC`: $ 2 $ - `ACAC`: $ 0 $ - `ACBC`: $ 1 $ - `ACCC`: $ 0 $ これらの和は $ 0\ +\ 2\ +\ 0\ +\ 1\ +\ 2\ +\ 2\ +\ 0\ +\ 1\ +\ 0\ =\ 8 $ であり、$ 8 $ を $ 10^9\ +\ 7 $ で割った余りである $ 8 $ を出力します。 ### Sample Explanation 2 $ Q\ =\ 0 $ のときは、$ S $ 自体の ABC 数を $ 10^9\ +\ 7 $ で割った余りを出力します。この文字列は問題文中で例として挙げたものと同じであり、その ABC 数は $ 3 $ です。 ### Sample Explanation 3 この場合、$ 3^Q $ 通りの文字列すべての ABC 数の和は $ 2291979612924 $ であり、これを $ 10^9\ +\ 7 $ で割った余りである $ 979596887 $ を出力します。