#P1269. 三级跳

三级跳

题目描述

若一个字符串 aa 只含有数字 11、22、33,定义它的三级跳子序列是指三个下标 ii、jj、kk,满足 ai=1a_i=1,aj=2a_j=2、ak=3a_k=3,且 i<j<ki<j<k。

例如字符串 11232 有 2 个三级跳。

给定一个字符串 SS,这个串包含数字 11、22、33,且包含一种特殊的字符 ?。每个 ? 都可以自由地替换为数字 11、22 或 33。

每个问号替换成数字后,将会产生各种字符串。请统计,这些字符串的三级跳子序列的数量之和,由于答案很大,输出答案模 1,000,000,0071,000,000,007 的余数。

例如,对于序列 12?3,会产生三种数字字符串:

  • 1213 有 11 个三级跳
  • 1223 有 22 个三级跳
  • 1233 有 22 个三级跳

所以共有 55 个三级跳。

输入格式

  • 单个字符串

输出格式

12?3
5

数据范围

记 ∣S∣|S| 表示输入字符串的长度

  • 对于 30%30\% 的数据,1≤∣S∣≤101\leq |S|\leq 10
  • 对于 60%60\% 的数据,1≤∣S∣≤2001\leq |S|\leq 200
  • 对于 100%100\% 的数据,1≤∣S∣≤300,0001\leq |S|\leq 300,000

来源

改编自 ABC104D We Love ABC