만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

쌓기나무

면접 대비

시간 제한1초메모리 제한128 MB

요약
0과 1로 이루어진 위에서 본 모습과 앞, 옆에서 본 최대 높이가 주어질 때, 세 모습을 모두 만족하면서 큐브를 가장 많이 쌓는 배치를 출력하거나 불가능하면 -1을 출력한다.
난이도

보통10점 중 4점

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

문제

정육면체 모양의 쌓기나무를 N×MN \times M 격자 위에 쌓았다. 각 칸에는 쌓기나무를 0개 이상 쌓을 수 있고, 한 칸에 쌓인 개수를 그 칸의 높이라고 한다.

이 입체를 세 방향에서 바라본 그림이 주어진다.

  • 위에서 본 그림은 NN행 MM열의 0과 1로 이루어진다. 높이가 1 이상인 칸은 1, 높이가 0인 칸은 0이다.
  • 앞에서 본 그림은 MM개의 수로 이루어진다. jj번째 수는 jj번째 열에 있는 칸의 높이 중 최댓값이다.
  • 오른쪽 옆에서 본 그림은 NN개의 수로 이루어진다. 오른쪽에서 바라보면 위에서 본 그림의 마지막 행이 가장 왼쪽에 오므로, kk번째 수는 N−k+1N-k+1번째 행에 있는 칸의 높이 중 최댓값이다.

세 그림을 모두 만족하는 높이 배치는 여러 개일 수 있다. 그중 쌓기나무를 가장 많이 쓴 배치를 구하여라. 그런 배치가 존재한다면 그것은 하나뿐이다.

입력

첫째 줄에 세로 길이 NN과 가로 길이 MM이 공백으로 구분되어 주어진다. (1≤N,M≤5001 \le N, M \le 500)

다음 NN개 줄에 위에서 본 그림이 한 줄에 MM개씩, 0 또는 1로 주어진다.

그다음 줄에 앞에서 본 그림이 MM개의 정수로 주어진다. 각 수는 0 이상 100 이하이다.

마지막 줄에 오른쪽 옆에서 본 그림이 NN개의 정수로 주어진다. 각 수는 0 이상 100 이하이다.

출력

세 그림을 모두 만족하면서 쌓기나무를 가장 많이 쓴 배치를 NN개 줄에 출력한다. 각 줄에는 그 행에 있는 MM개 칸의 높이를 공백 하나로 구분해 출력한다.

세 그림을 모두 만족하는 배치가 없으면 -1을 출력한다.

예제3

  1. 예제 1

    입력
    2 3
    0 1 0
    1 1 1
    1 4 3
    3 4
    
    예상 출력
    0 4 0
    1 3 3
    
  2. 예제 2

    입력
    2 2
    1 1
    1 1
    2 2
    1 2
    
    예상 출력
    2 2
    1 1
    
  3. 예제 3

    입력
    1 1
    1
    0
    0
    
    예상 출력
    -1