Олимпиадный тренинг

Задача . E. Булева функция


В данной задаче рассматриваются булевы функции от четырех переменных A, B, С, 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 в заданных наборах переменных. Так как величина результата может быть большой, выведите её остаток от деления на 109 + 7.

Входные данные

В первой строке содержится выражение s (1 ≤ |s| ≤ 500), в котором некоторые символы операторов и/или переменных заменены знаком '?'.

Во второй строке содержится число n (0 ≤ n ≤ 24) — количество наборов переменных, для которых известно значение функции f(A, B, C, D). В следующих n строках содержатся описания наборов: в i-й из них содержатся пять целых чисел ai, bi, ci, di, ei (0 ≤ ai, bi, ci, di, ei ≤ 1), разделенных пробелами и означающих, что f(ai, bi, ci, di) = ei.

Гарантируется, что все четверки (ai, bi, ci, di) различны.

Выходные данные

В единственной строке выведите ответ на задачу.

Примечание

В первом примере двумя подходящими выражением являются 'C' и 'd'.

Во втором примере выражения выглядят так: '(A)&(a)', '(A)&(b)', '(A)&(C)', '(A)&(D)'.


Примеры
Входные данныеВыходные данные
1 ?
2
1 0 1 0 1
0 1 1 0 1
2
2 (A)?(?)
1
1 1 0 0 0
4
3 ((?)&(?))|((?)&(?))
0
4096
4 b
1
1 0 1 1 1
1

time 4000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя