#CF1426F. 子序列的数量

子序列的数量

子序列的数量

  • 时间限制:1 秒
  • 内存限制:256 MiB

题目描述

给定一个仅由小写字母 a、b、c 和问号 ? 组成的字符串 ss。

设字符串中问号的数量为 kk。你需要把每一个问号分别替换为 a、b 或 c,因此一共可以得到 3k3^k 个只含 a、b、c 的字符串。

请统计所有这些字符串中,子序列 abc 的数量之和。答案可能很大,请对 109+710^9+7 取模。

字符串 tt 的一个子序列,是指从 tt 中删除若干个字符(也可以不删除),且不改变剩余字符相对顺序后得到的字符串。不同的下标三元组视为不同的子序列。

输入格式

第一行输入一个整数 nn,表示字符串长度。

第二行输入一个长度为 nn 的字符串 ss,其中每个字符均为 a、b、c 或 ?。

输出格式

输出一个整数,表示所有替换结果中子序列 abc 的数量之和对 109+710^9+7 取模后的值。

样例输入 1

6
ac?b?c

样例输出 1

24

样例输入 2

7
???????

样例输出 2

2835

样例输入 3

9
cccbbbaaa

样例输出 3

0

样例输入 4

5
a???c

样例输出 4

46

数据范围

对于所有数据,3≤n≤200 0003\le n\le 200\,000,且 ss 仅包含 a、b、c 和 ?。

子任务编号 分值 特殊限制
1 32 n≤9n\le 9
2 28 字符串中 ? 的数量不超过 44
3 40 无特殊限制