CF582E Boolean Function

题目描述

在本题中,我们考虑四个变量 $A,B,C,D$ 的布尔函数。变量 $A,B,C,D$ 是逻辑值,可以取值 $0$ 或 $1$。我们将使用以下语法来定义一个函数: ::= | () () ::= 'A' | 'B' | 'C' | 'D' | 'a' | 'b' | 'c' | 'd' ::= '&' | '|' 其中,大写字母 $A,B,C,D$ 代表变量本身,小写字母分别表示其取反。例如,如果 $A=1$,则字符 'A' 对应值 $1$,字符 'a' 对应值 $0$。运算符 '&' 表示逻辑与,'|' 表示逻辑或。 现在,给定一个表达式 $s$,用来定义函数 $f$,其中部分操作符和变量被替换成了字符 '?'。你还知道 $f(A,B,C,D)$ 对于某 $n$ 个不同变量取值的结果。请你计算,有多少种方式可以填补表达式中缺失的部分,使得完整的表达式在给定的变量取值下,输出期望的 $f$ 值。由于答案可能很大,请输出答案对 $10^9+7$ 取模的结果。

输入格式

第一行给出表达式 $s$($1 \leq |s| \leq 500$),其中部分操作符和/或变量被替换成了字符 '?'。 第二行包含一个整数 $n$($0 \leq n \leq 2^{4}$),表示已知的变量组合下函数 $f(A,B,C,D)$ 的值的数量。接下来的 $n$ 行,每行包含五个整数 $a_i, b_i, c_i, d_i, e_i$($0 \leq a_i, b_i, c_i, d_i, e_i \leq 1$),表示 $f(a_i, b_i, c_i, d_i) = e_i$。 保证所有的元组 $(a_i, b_i, c_i, d_i)$ 均不重复。

输出格式

输出一个整数,表示满足条件的合法表达式的总数,结果对 $10^9+7$ 取模。

说明/提示

在第一个样例中,合法的表达式为 'C' 和 'd'。 在第二个样例中,合法表达式可以为 '(A)&(a)'、'(A)&(b)'、'(A)&(C)'、'(A)&(D)'。 由 ChatGPT 5 翻译