100 atcoder#ABC104D. [ABC104D] We Love ABC

[ABC104D] We Love ABC

配点 : 400400

問題文

文字列 TTABC 数 とは、以下の条件をすべて満たす整数の組 (i,j,k)(i, j, k) の個数です。

  • 1i<j<kT1 \leq i < j < k \leq |T|T|T|TT の長さ)
  • Ti=T_i = ATiT_iTT の先頭から ii 番目の文字)
  • Tj=T_j = B
  • Tk=T_k = C

例えば、T=T = ABCBC のとき、条件をすべて満たす組 (i,j,k)(i, j, k)(1,2,3),(1,2,5),(1,4,5)(1, 2, 3), (1, 2, 5), (1, 4, 5)33 個であるため、TT の ABC 数は 33 です。

文字列 SS が与えられます。SS のそれぞれの文字は A, B, C, ? のいずれかです。

SS に含まれる ? の個数を QQ とします。SS に含まれる ? をそれぞれ A, B, C のいずれかに置き換えることで 3Q3^Q 通りの文字列が作られます。これらの文字列すべての ABC 数の和を求めてください。

ただし、この和は非常に大きくなりうるため、和を 109+710^9 + 7 で割った余りを出力してください。

制約

  • 3S1053 \leq |S| \leq 10^5
  • SS のそれぞれの文字は A, B, C, ? のいずれかである。

入力

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

SS

出力

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

A??C
8

この場合、Q=2Q = 2 であり、? をそれぞれ A, B, C のいずれかに置き換えることで 3Q=93^Q = 9 通りの文字列が作られます。これらの文字列それぞれの ABC 数を以下に示します。

  • AAAC: 00
  • AABC: 22
  • AACC: 00
  • ABAC: 11
  • ABBC: 22
  • ABCC: 22
  • ACAC: 00
  • ACBC: 11
  • ACCC: 00

これらの和は 0+2+0+1+2+2+0+1+0=80 + 2 + 0 + 1 + 2 + 2 + 0 + 1 + 0 = 8 であり、88109+710^9 + 7 で割った余りである 88 を出力します。

ABCBC
3

Q=0Q = 0 のときは、SS 自体の ABC 数を 109+710^9 + 7 で割った余りを出力します。この文字列は問題文中で例として挙げたものと同じであり、その ABC 数は 33 です。

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

この場合、3Q3^Q 通りの文字列すべての ABC 数の和は 22919796129242291979612924 であり、これを 109+710^9 + 7 で割った余りである 979596887979596887 を出力します。