eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Троичная логика

Троичная логика

Говорят, что на заре зарождения программирования супруги программистов, не являющиеся программистами (представьте себе - такое тоже иногда имеет место), указывали своим супругам на оторванность от жизни строго двоичной логики. Представьте себе, что критике подвергался даже всем известный оператор ветвления в том или ином виде реализации практически во всех программистских инструментальных средствах. Скажу по секрету, что известен проект расширенного оператора ЕСЛИ ТО ИНАЧЕ НО !? - с непременным использованием двойного символа "!?" в качестве его признака завершения. Говорят, что именно это обстоятельство стимулировало развитие различных видов недвоичной логики, а также появление различных вариантов оператора выбора (переключения)... Пока еще нет официального статистического отчета о том, как повлияли сии новации на внутрисемейный климат семей, в которых только один из супругов является программистом, но вывод о чрезвычайной важности роли супругов программистов в процессе развития программирования можно сделать однозначно.

Пусть дано выражение, составленное из чисел 0, 1, 2, переменных, которые могут получить только одно из этих значений (0, 1, 2) а также операций сравнения, логического умножения, отрицания и "строгого" логического сложения (аналоги исключающего или), определенных в соответствии со следующими таблицами:

111.png

Будем считать, также определенными операции ">" ">=" "<>;" в соответствии со следующими определениями. Для любых двух x, y, значения которых 0, 1 либо 2:

  • x<y равносильно !(x
  • >=y равносильно (x>y)|(x=y)
  • x<>y равносильно !(x=y)

Приоритеты операций приведены ниже в порядке убывания:

!

<> <= >=

= <>

&

^

|

В выражении могут быть использованы круглые скобки. Для заданного выражения и (при необходимости) входящих в него переменных, определить значение этого выражения.

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

Первая строка содержит одно число, количество тестовых примеров, которое не превосходит 1000 и не меньше 1. Дальше идет соответствующее количество тестовых примеров. Каждый тестовый пример начинается со строки, содержащей исходное выражение. За строкой, содержащей выражение, следует последовательность из не менее одной строки, каждая из которых содержит по 3 числа, записанных через пробел - соответственно, значения x, y, z. Признаком конца этой последовательности строк будет строка с единственным числом, равным 3.

Выражение не содержит пробелов и может содержать не более трех односимвольных переменных. В качестве переменных могут быть использованы только 'x', 'y', 'z'. Длина каждого выражения не превосходит 100.

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

Выходной файл содержит значения выражений, приведенных в отдельных строках в последовательности, соответствующей, приведенной во входном файле.

Лимит времени 1 секунда
Лимит использования памяти 256 MiB
Входные данные #1
2
2&1|1<=1^(2|1)
1 1 1
3
x&z|x<=z^(x|1)
2 1 1
0 0 1
3
Выходные данные #1
1
2
0
Автор Т.Заркуа
Источник Зимние сборы в Харькове 2010 День 7