Codeforces Round 674 (Div. 3) |
---|
Закончено |
Вам задана строка $$$s$$$, состоящая из строчных букв «a», «b» и «c», а также из знаков вопроса «?».
Пусть количество знаков вопроса в строке $$$s$$$ равно $$$k$$$. Заменим каждый знак вопроса на одну из букв «a», «b» и «c». Таким образом, мы получим $$$3^{k}$$$ всевозможных строк, состоящих только из букв «a», «b» и «c». Например, если $$$s = $$$«ac?b?c» после замены знаков вопроса мы получим строки $$$[$$$«acabac», «acabbc», «acabcc», «acbbac», «acbbbc», «acbbcc», «accbac», «accbbc», «accbcc»$$$]$$$.
Перед вами стоит задача определить количество подпоследовательностей «abc» во всех получившихся строках. Так как ответ может быть достаточно большим, выведите его по модулю числа $$$10^{9} + 7$$$.
Подпоследовательность строки $$$t$$$ — это такая последовательность, которую можно получить из строки $$$t$$$ путем удаления некоторого (возможно нулевого) количества букв, при этом порядок оставшихся букв должен быть неизменным. Например, в строке «baacbc» есть две подпоследовательности «abc». Это подпоследовательность, состоящая из букв в позициях $$$(2, 5, 6)$$$, и подпоследовательность, состоящая из букв в позициях $$$(3, 5, 6)$$$.
В первой строке следует целое число $$$n$$$ $$$(3 \le n \le 200\,000)$$$ — длина строки $$$s$$$.
Во второй строке следует строка $$$s$$$ длины $$$n$$$, состоящая из строчных букв «a», «b» и «c», а также из знаков вопроса «?».
Выведите суммарное количество подпоследовательностей вида «abc» во всех строках, которые можно получить путем замены знаков вопроса на буквы «a», «b» и «c», по модулю $$$10^{9} + 7$$$.
6 ac?b?c
24
7 ???????
2835
9 cccbbbaaa
0
5 a???c
46
В первом примере после замены знаков вопроса получим $$$9$$$ строк:
Таким образом, во всех строках содержатся $$$2 + 4 + 4 + 2 + 3 + 4 + 1 + 2 + 2 = 24$$$ подпоследовательности «abc».
Название |
---|