E. Булева функция
ограничение по времени на тест
4 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В данной задаче рассматриваются булевы функции от четырех переменных 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) различны.

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

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

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

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

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