Операції над множинами#7323

Операції над множинами

1 секунда
64 мегабайти
Середня

У цій задачі вам потрібно виконати операції над множинами відповідно до заданих виразів.

Розглянемо вираз, що містить три множини: , і , а також три операції: об'єднання, перетин і доповнення.

У нашій задачі множини складаються лише з чисел \{1, 2, \ldots, n\} для певного фіксованого . Об'єднанням множин і є множина, яка містить усі числа, що присутні хоча б в одній із множин або . Перетином множин і є множина, яка містить елементи, що присутні одночасно в обох множинах і . Доповненням множини є множина, що містить усі числа з \{1, 2, \ldots, n\}, яких немає в . Наприклад, якщо n = 5, X = \{3, 4\} і Y = \{1, 3\}, то об'єднанням і буде \{1, 3, 4\}, перетином буде , а доповненням буде множина \{1, 2, 5\}.

Вираз визначається рекурсивно наступним чином:

Символ   позначає доповнення множини , | - об'єднання множин і , а & - перетин множин і . Доповнення обчислюється перед перетином, а перетин - перед об'єднанням. Дужки використовуються для визначення пріоритету операцій. Наприклад, вираз |   & обчислюється як | (( ) & ).

Вам надано один вираз і набір із трьох множин , і . Потрібно обчислити значення виразу для кожної заданої трійки.

Вхідні дані

Перший рядок містить вираз довжиною від до символів. Гарантується, що вираз відповідає наведеному вище рекурсивному визначенню. У першому рядку немає пробілів.

Другий рядок містить два числа і (1 \le n \le 20, 1 \le t \le 10\,000) - кількість елементів і трійок множин.

Кожен з наступних рядків задає трійку множин , і саме в такому порядку. Множина задається набором чисел у ній в строго зростаючому порядку, за яким слідує нуль. Числа розділені одним або кількома пробілами.

Вихідні дані

Для кожної з трійок множин виведіть в окремому рядку одну множину: результат обчислення виразу для заданих , і . Множину слід записати як набір чисел, що належать їй, у строго зростаючому порядку, за яким слідує нуль. Розділяйте числа одним пробілом.

Приклади

Приклад 1

Loading
Loading