아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

Булева функция

시간 제한2초메모리 제한512 MB

요약
두 입력 부울 함수와 N이 주어질 때, 함수로 왼쪽부터 접어 계산한 결과가 1이 되면서 1의 개수가 최대인 N자리 비트열을 구한다.
난이도

보통10점 중 6점

유형
그리디, 수학, 구현
정답자
아직 제출이 없습니다

문제

Недавно на уроке информатики ученики одного из классов изучили булевы функции. Напомним, что булева функция 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, невозможно.

예제3

  1. 예제 1

    입력
    4
    0110
    
    예상 출력
    1011
    
  2. 예제 2

    입력
    5
    0100
    
    예상 출력
    11111
    
  3. 예제 3

    입력
    6
    0000
    
    예상 출력
    No solution