CF1594E2 Rubik's Cube Coloring (hard version)

题目描述

这是该问题的困难版本。不同之处在于,在本版本中,有一些节点的颜色已经被选定。 Theofanis 很饿,他想吃他最喜欢的食物 sheftalia。然而,他必须先完成作业。你能帮他解决这个问题吗? 你有一棵完美的二叉树,共有 $2^k - 1$ 个节点——也就是说,对于所有 $i$ 满足 $1 \leq i \leq 2^{k-1} - 1$,节点 $i$ 有且仅有两个孩子,分别是 $2i$ 和 $2i+1$。编号从 $2^{k-1}$ 到 $2^k-1$ 的节点没有任何孩子。你需要用魔方的 $6$ 种颜色(白色、绿色、红色、蓝色、橙色和黄色)来给这些节点染色。 我们称一种染色方案是“好的”,当且仅当所有相邻节点的颜色在魔方上是相邻的面。 更正式地说: - 白色节点不能与白色和黄色节点相邻; - 黄色节点不能与白色和黄色节点相邻; - 绿色节点不能与绿色和蓝色节点相邻; - 蓝色节点不能与绿色和蓝色节点相邻; - 红色节点不能与红色和橙色节点相邻; - 橙色节点不能与红色和橙色节点相邻; 然而,树中有 $n$ 个特殊节点,它们的颜色已经被选定。 你需要计算该二叉树的所有“好”的染色方案数。只要有至少一个节点颜色不同,就认为两个染色方案不同。 答案可能很大,请输出答案对 $10^9+7$ 取模后的结果。

输入格式

第一行包含整数 $k$($1 \leq k \leq 60$),表示你需要染色的完美二叉树的层数。 第二行包含整数 $n$($1 \leq n \leq \min(2^k - 1, 2000)$),表示已经确定颜色的节点数。 接下来的 $n$ 行,每行包含一个整数 $v$($1 \leq v \leq 2^k - 1$)和一个字符串 $s$,分别表示节点编号和该节点的颜色($s$ 为 white、yellow、green、blue、red 或 orange 之一)。 保证每个节点 $v$ 在输入中最多出现一次。

输出格式

输出一个整数,表示不同的“好”染色方案数,对 $10^9+7$ 取模。

说明/提示

下图展示了第一个测试样例的一种合法染色方案。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1594E2/dcebca3c4893383a751dc627ead5632c7d038ce7.png) 由 ChatGPT 4.1 翻译