P12607 三叉求和

题目背景

很久很久以前,小 A 在一棵无穷深的三叉树上摘苹果,这棵苹果树的根没有苹果,每个点三个儿子的苹果的数量分别是这个点的苹果数量的三倍加上 $0,1,2$,小 A 从根节点一直往下走了正好 $d$ 步并摘到了 $k$ 个苹果,可惜的是,小 A 只记得 $k$ 在三进制下的某些位,他想知道有多少种方式符合他的记忆。

题目描述

有一棵深度无穷大的以 $0$ 为根的三叉树,节点 $i$ 的儿子分别是节点 $3i+1,3i+2,3i+3$。 设节点 $i$ 的点权为 $a_i$。对于 $0\le j\le 2$,有 $a_{3i+j+1}=3\times a_i+j$,特别的,$a_0=0$。 你的任务是求从根出发,找长度 $=d$ 的简单路径,并使得该路径经过的所有点的点权和为 $k$。你需要求出所有合法路径的条数。 然而 $k$ 并不唯一,$k$ 的三进制表示中仅有某些位是已知的,而其它的位将以字符 $\tt ?$ 表示。你需要对所有可能的 $k$ 在上述问题中的答案求和,最后再对 $10^9+7$ 取模。

输入格式

第一行一个整数 $d$。 第二行一个长度为 $d$ 的字符串,表示三进制形式的 $k$。注意 $k$ 可能有前导零。

输出格式

输出一行一个整数,表示你所求的答案。

说明/提示

### 样例 #1 解释 合法的路径有: - $[0,1,5,17]$ - $[0,2,7,23]$ - $[0,2,9,30]$ 对应的点权分别为: - $[0,0,1,4]$ - $[0,1,3,10]$ - $[0,1,5,17]$ ### 数据范围 |测试点编号|$d$|特殊性质| |:----:|:----:|:----:| |$1\sim 2$|$\leq15$|-| |$3$|$\leq50$|A| |$4$|$\leq50$|B| |$5\sim 8$|$\leq50$|-| |$9\sim 10$|$\leq300$|A| |$11\sim 12$|$\leq300$|B| |$13\sim 14$|$\leq300$|-| |$15$|$\leq2000$|A| |$16$|$\leq2000$|B| |$17\sim 20$|$\leq2000$|-| 特殊性质 A:保证 $k$ 中 $?$ 的数量 $\leq 1$。 特殊性质 B:保证所有的位置均为 $?$。 对于 $100\%$ 的数据,$1\le d\le 2000,0\le k\lt 3^{d+1}$。