Ограничение по времени: 2.000 секунд
Ограничение по памяти: 100.000 мегабайт
Недавно на уроке информатики ученики одного из классов изучили булевы функции. Напомним, что булева функция f сопоставляет значениям двух булевых аргументов, каждый из которых может быть равен 0 или 1, третье булево значение, называемое результатом. Для учеников, которые выразили желание более подробно изучать эту тему, учительница информатики на дополнительном уроке ввела в рассмотрение понятие цепного вычисления булевой функции f.
Если задана булева функция f и набор из N булевых значений a1, a2, . . . , aN, то результат цепного вычисления этой булевой функции определяется следующим образом:
Например, если изначально задано три булевых значения: a1 = 0, a2 = 1, a3 = 0, а функция f — ИЛИ (OR), то после первого шага получается два булевых значения – (0 OR 1) и 0, то есть, 1 и 0. После второго (и последнего) шага получается результат цепного вычисления, равный 1, так как 1 OR 0 = 1.
В конце дополнительного урока учительница информатики написала на доске булеву функцию f и попросила одного из учеников выбрать такие N булевых значений ai, чтобы результат цепного вычисления этой функции был равен единице. Более того, она попросила найти такой набор булевых значений, в котором число единиц было бы как можно большим.
Требуется написать программу, которая решала бы поставленную учительницей задачу.
Первая строка содержит одно натуральное число N (2 ≤ N ≤ 100 000).
Вторая строка входного файла содержит описание булевой функции в виде четырех чисел, каждое из которых – ноль или единица. Первое из них есть результат вычисления функции в случае, если оба аргумента – нули, второе – результат в случае, если первый аргумент – ноль, второй – единица, третье – результат в случае, если первый аргумент – единица, второй – ноль, а четвертый – в случае, если оба аргумента – единицы.
В выходной файл необходимо вывести строку из N символов, определяющих искомый набор булевых значений ai с максимально возможным числом единиц.
Если ответов несколько, требуется вывести любой из них. Если такого набора не существует, выведите фразу No solution
.
input | output |
---|---|
4 0110 |
1011 |
5 0100 |
11111 |
6 0000 |
No solution |
В первом примере процесс вычисления цепного значения булевой функции f происходит следующим образом:
1011 → 111 → 01 → 1
Во втором примере вычисление цепного значения булевой функции f происходит следующим образом:
11111 → 0111 → 111 → 01 → 1
В третьем примере получить цепное значение булевой функции f, равное 1, невозможно.