#2725. We Love ABC

0

We Love ABC

We Love ABC

题目描述

字符串 TT 的 ABC 数 是满足下列所有条件的整数三元组 (i,j,k)(i, j, k) 的个数:

1 ≤ i < j < k ≤ |T|(∣T∣|T| 是 TT 的长度。) Ti=T_i = AA(TiT_i 是从开头数的 TT 的第 ii 个字符。) Tj=T_j = BB Tk=T_k = CC

例如,当 T=T = ABCBCABCBC 时,有三个满足条件的整数三元组 (i,j,k)(i, j, k):(1,2,3),(1,2,5),(1,4,5)(1, 2, 3), (1, 2, 5), (1, 4, 5)。因此,TT 的 ABC 数是 33。 给定一个字符串 SS。SS 的每个字符都是 AA, BB, CC 或 ??。 设 QQ 为 SS 中 ?? 出现的次数。通过将 SS 中的每个 ?? 替换为 AA, BB 或 CC,我们可以得到 3Q3^Q 个字符串。求所有这些字符串的 ABC 数之和。 这个和可能非常大,因此请对 109+710^9 + 7 取模后输出。

输入格式

从标准输入给出,格式如下: SS

输出格式

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

A??C
8
ABCBC
3
????C?????B??????A???????
979596887

提示

3≤∣S∣≤1053 ≤ |S| ≤ 10^5 SS 的每个字符都是 AA, BB, CC 或 ??。在这个例子中,Q=2Q = 2,通过将每个 ?? 替换为 AA, BB 或 CC,我们可以得到 3Q=93^Q = 9 个字符串。每个字符串的 ABC 数如下:

AAACAAAC: 00 AABCAABC: 22 AACCAACC: 00 ABACABAC: 11 ABBCABBC: 22 ABCCABCC: 22 ACACACAC: 00 ACBCACBC: 11 ACCCACCC: 00

它们的和为 0+2+0+1+2+2+0+1+0=80 + 2 + 0 + 1 + 2 + 2 + 0 + 1 + 0 = 8,所以我们输出 88 对 109+710^9 + 7 取模,即 88。
当 Q=0Q = 0 时,输出的就是 SS 自身的 ABC 数对 109+710^9 + 7 取模。该字符串与问题描述中的示例相同,其 ABC 数为 33。
在该情况下,所有字符串的 ABC 数之和为 22919796129242291979612924,对 109+710^9 + 7 取模后应输出 979596887979596887。

标签: AtCoder|abc104D

来源

AtCoder|abc104D