Гарантия удовлетворения
Рассмотрим очень простой язык программирования с тремя типами операторов:
if then fi
if then else fi
checkpoint
Все ключевые слова должны быть написаны строчными буквами. Программа представляет собой список из одного или более операторов.
Программа состоит из:
Переменные: одна заглавная буква.
Операторы: унарный (NOT), бинарный (AND), бинарный | (OR).
Приоритет операторов: > > |.
Скобки.
Без пробелов.
→ or or | or () or [A-Z]
Дана синтаксически корректная программа на этом простом языке. Какие значения должны принимать булевы переменные, чтобы удовлетворить каждому из контрольных пунктов?
Входные данные
Ввод представляет собой одну синтаксически корректную программу на этом простом языке. Гарантируется, что ключевые слова будут в нижнем регистре, а булевы переменные будут представлены одной заглавной буквой. Пробелы (пробел, табуляция или новая строка) гарантированно разделяют ключевые слова и окружают выражения. Выражения не содержат пробелов. Каждое выражение содержит как минимум один оператор. Входная программа не использует более 20 доступных переменных и не содержит более 5000 операторов. Ни одно булево выражение не будет длиннее 128 символов.
Выходные данные
Для каждого checkpoint, в порядке их появления, выведите одну строку, состоящую из '>' за которым следует либо список переменных, либо слово 'unreachable'. Если checkpoint достижим, выведите список переменных в алфавитном порядке, с заглавной буквой, если она должна быть истинной, или строчной буквой, если она должна быть ложной, чтобы достичь checkpoint. Опустите переменную, если она может быть любой. Если checkpoint недостижим, выведите слово 'unreachable', полностью в нижнем регистре. Не печатайте пробелы и не печатайте пустые строки между строками вывода.