Главная > Выскажись
2000
Имя входного файла: input.txt
Имя выходного файла: output.txt
Ограничение по времени: 10 секунд
Максимальная оценка: 40 баллов

Простым высказыванием называется простое повествовательное предложение, относительно которого можно сказать, что оно истинно или ложно. Примерами таких высказываний являются предложения:

  1. Всероссийская олимпиада по информатике проводится весной (истинно).
  2. 5 в квадрате меньше нуля (ложно).

Одно из слов простого высказывания на русском языке назовем определяющим, если в результате добавления перед ним частицы НЕ значение простого высказывания изменяется на противоположное. В первом примере таким словом является слово "весной", а во втором - "меньше".

Сложным высказыванием назовем два и более простых высказывания, соединенные союзами И, ИЛИ, оборотами ЕСЛИ ..., ТО ... и ... ТОГДА И ТОЛЬКО ТОГДА, КОГДА ... . Назовем эти союзы и обороты вместе с частицей НЕ логическими операциями, обозначив их следующим образом:

Значение сложного высказывания можно определить, используя таблицы истинности логических операций. Приведем таблицы истинности перечисленных операций, обозначив ложное значение нулем, а истинное - единицей:

A!A
01
10

ABA&BA|BA=>BA<=>B
000011
010110
100100
111111

В сложном высказывании операции имеют следующие приоритеты в порядке от высшего к низшему: !, &, |, =>, <=>. Например, в выражении A<=>!B=>C|D&E операции будут выполняться в таком порядке: (A<=>((!B)=>(C|(D&E)))). Здесь и далее в качестве имен высказываний будем использовать большие буквы латинского алфавита.

Рассмотрим следующую последовательность описаний.

  1. Сначала идут описания простых высказываний вида:
    <имя>=<простое высказывание>
    В каждом <простом высказывании> определяющее слово заключается в круглые скобки.
  2. Затем из описанных ранее высказываний с помощью логических операций строятся сложные высказывания по одному из следующих двух правил:
    <имя>=!<имя>
    <имя>=<имя><логическая операция><имя>
    При использовании второго правила операция ! (НЕ) не может использоваться в качестве >логической операции>.

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


Требуется

  1. Построить представление результирующего высказывания, использующее только имена простых высказываний, заменяя имя каждого сложного высказывания на его описание, заключив его в скобки. (10 баллов)
  2. Изменить полученное в пункте 1 логическое выражение так, чтобы операции ! (НЕ) стояли только перед именами простых высказываний, а не перед скобками, и истинность результирующего высказывания при этом не изменилась. Скобки можно как оставлять, так и раскрывать, используя приоритеты операций. Заметим, что в измененном логическом выражении возможно появление любых из перечисленных выше логических операций, отличных от имевшихся в исходном логическом выражении. (20 баллов)
  3. Построить результирующее высказывание на русском языке согласно полученному в пункте 2 выражению, опуская круглые скобки у определяющих слов в простых высказываниях и круглые скобки в логическом выражении. (10 баллов)


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

В первой строке входного файла содержится число N, задающее количество описаний в последовательности. В последующих N строках записаны описания по определенным выше правилам, каждое описание - в отдельной строке. Простые высказывания обозначаются буквами из диапазона от A до J и имеют длину не более 50 символов. Сложные высказывания обозначаются буквами из диапазона от K до T, пробелы в их определениях отсутствуют. В конце файла может содержаться одна или несколько пустых строк.


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

В выходном файле должны находиться 3 строки, каждая из которых является ответом на соответствующие пункты задания. Вторая строка должна содержать не более 50000 символов. В третьей строке слова, заменяющие логические операции, записываются заглавными русскими буквами и отделяются от простых высказываний пробелами. При отсутствии решения по какому-либо из пунктов задания соответствующая этому пункту строка должна быть пустой. Если в выходном файле вторая строка пустая, то ответ на пункт 3 оцениваться не будет.


Пример

Оба примера выходного файла являются допустимыми для приведенного входного файла.
input.txtoutput.txt
6
A=(шел) дождь
В=асфальт (мокрый)
C=(хочется) гулять
K=А&B
L=!К
М=L=>C
((!(A&B))=>C)
((!A|!B)=>C)
ЕСЛИ НЕ шел дождь ИЛИ асфальт НЕ мокрый, ТО хочется гулять
((!(A&B))=>C)
C|A&B&!C
хочется гулять ИЛИ шел дождь И асфальт мокрый И НЕ хочется гулять

 
Hosted by uCoz