#ATabc104d. [ABC104D] We Love ABC

[ABC104D] We Love ABC

AT_abc104_d [ABC104D] We Love ABC

题目描述

字符串 TTABC 数 是满足以下所有条件的整数三元组 (i, j, k)(i,\ j,\ k) 的个数。

  • 1 <= i < j < k <= T1\ <=\ i\ <\ j\ <\ k\ <=\ |T|T|T| 表示 TT 的长度)
  • Ti=T_i = ATiT_i 表示 TT 从首位开始的第 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,其中每个字符都是 ABC? 之一。

SS? 的个数为 QQ。将 SS 中的每个 ? 替换为 ABC 中的任意一个,可以得到 3Q3^Q 种不同的字符串。请计算这些字符串的 ABC 数之和。

由于这个和可能非常大,请输出其对 109+710^9 + 7 取模的结果。

输入格式

输入为以下格式,通过标准输入给出。

SS

输出格式

请输出 3Q3^Q 种字符串所有 ABC 数之和对 109+710^9 + 7 取模的结果。

样例 1

输入

A??C

输出

8

样例 2

输入

ABCBC

输出

3

样例 3

输入

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

输出

979596887

说明/提示

限制条件

  • 3 <= S <= 1053\ <=\ |S|\ <=\ 10^5
  • SS 的每个字符都是 ABC? 之一。

样例解释 1

在本例中,Q=2Q = 2,将每个 ? 替换为 ABC,共可得到 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,对 109+710^9 + 7 取模后输出 88

样例解释 2

Q=0Q = 0 时,只需输出 SS 本身的 ABC 数对 109+710^9 + 7 取模的结果。此字符串与题目描述中的例子相同,其 ABC 数为 33

样例解释 3

在本例中,3Q3^Q 种字符串所有 ABC 数之和为 22919796129242291979612924,对 109+710^9 + 7 取模后为 979596887979596887,输出 979596887979596887

由 ChatGPT 4.1 翻译