Булева функция
시간 제한2초메모리 제한512 MB
두 입력 부울 함수와 N이 주어질 때, 함수로 왼쪽부터 접어 계산한 결과가 1이 되면서 1의 개수가 최대인 N자리 비트열을 구한다.
문제
Недавно на уроке информатики ученики одного из классов изучили булевы функции. Напомним, что булева функция f сопоставляет значениям двух булевых аргументов, каждый из которых может быть равен 0 или 1, третье булево значение, называемое результатом. Для учеников, которые выразили желание более подробно изучать эту тему, учительница информатики на дополнительном уроке ввела в рассмотрение понятие цепного вычисления булевой функции f.
Если задана булева функция f и набор из N булевых значений a1, a2, ..., aN, то результат цепного вычисления этой булевой функции определяется следующим образом:
- если N = 1, то он равен a1;
- если N > 1, то он равен результату цепного вычисления булевой функции f для набора из (N–1) булевого значения f(a1,a2), a3, …, aN, который получается путем замены первых двух булевых значений в наборе из N булевых значений на единственное булево значение – результат вычисления функции f от a1 и a2.
Например, если изначально задано три булевых значения: 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».
힌트
В первом примере процесс вычисления цепного значения булевой функции f происходит следующим образом:
1011 → 111 → 01 → 1
Во втором примере вычисление цепного значения булевой функции f происходит следующим образом:
11111 → 0111 → 111 → 01 → 1
В третьем примере получить цепное значение булевой функции f, равное 1, невозможно.