복원

면접 대비

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

요약
잃어버린 0/1 행렬의 각 행과 열의 홀짝만 주어질 때, 1을 최대로 포함하고 그중 행 우선 문자열이 가장 작은 행렬을 출력하고 불가능하면 -1을 출력한다.
난이도

보통10점 중 6점

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

문제

0과 1로 이루어진 n × m 행렬을 생각하자. 예를 들어 다음 4 × 4 행렬이 있다.

1 1 1 1
0 1 1 1
0 1 1 1
0 1 1 0

각 행과 각 열에 대해 짝수 패리티를 계산할 수 있다. 이 경우 각 행의 패리티는 [0, 1, 1, 0]이고 각 열의 패리티는 [1, 0, 0, 1]이다. 패리티는 행이나 열에 있는 1의 개수가 홀수이면 1, 짝수이면 0이다. 맨 위 행이 1번 행, 맨 아래 행이 n번 행이고, 맨 왼쪽 열이 1번 열, 맨 오른쪽 열이 m번 열이다.

원래 행렬을 잃어버리고 각 행과 각 열의 패리티만 남았다고 하자. 원래 행렬을 복원할 수 있을까? 아쉽게도 원래 행렬을 유일하게 복원할 수는 없지만, 몇 가지 조건을 걸면 조건에 맞는 행렬을 유일하게 복원할 수 있다. 첫째, 복원한 행렬은 1을 최대한 많이 포함해야 한다. 둘째, 1이 가장 많은 복원 행렬들 중에서 1번 행부터 시작해 2번 행을 1번 행 뒤에 붙이고, 이어서 3번 행, 4번 행, ...을 붙여 만든 이진수가 가장 작은 행렬을 사용한다.

입력

입력은 하나의 테스트 케이스로 이루어진다. 프로그램은 서로 다른 입력으로 여러 번 실행될 수 있다. 각 테스트 케이스는 정확히 두 줄로 이루어진다. 첫째 줄에는 0과 1로만 이루어진 문자열 R (1 ≤ |R| ≤ 50)이 주어진다. 이는 각 행의 패리티를 순서대로 나타낸다. 둘째 줄에는 0과 1로만 이루어진 문자열 C (1 ≤ |C| ≤ 50)가 주어진다. 이는 각 열의 패리티를 순서대로 나타낸다.

출력

주어진 조건에 따라 원래 행렬을 복원할 수 있으면, |R|개의 줄에 각각 정확히 |C|개의 문자로 이루어지고 0과 1로만 구성된 행렬을 출력한다. 원래 행렬을 복원할 수 없으면 −1을 출력한다.

예제3

  1. 예제 1

    입력
    0110
    1001
    
    예상 출력
    1111
    0111
    1110
    1111
    
  2. 예제 2

    입력
    0
    1
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    11
    0110
    
    예상 출력
    1011
    1101