데이터 복구

면접 대비

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

요약
일부 칸이 지워진 표와 모든 행·열 합이 주어질 때, 지워진 칸의 값이 하나로 정해지면 그 값을, 아니면 -1을 출력합니다.
난이도

보통10점 중 6점

유형
그래프, 누적 합, 그리디, 구현
정답자
아직 제출이 없습니다

문제

제임스는 회사의 중요한 데이터를 표에 적었고, 표의 각 칸에는 0 이상 100 이하의 정수가 들어 있다. 통계를 위해 그는 각 행의 합과 각 열의 합도 함께 적어 두었다.

회의에 가는 길에 종이가 비에 젖어 일부 칸을 읽을 수 없게 되었지만, 행과 열의 합은 그대로 남아 있다. 제임스는 표를 최대한 복구하려고 한다. 아직 읽을 수 있는 칸은 값을 이미 알고 있고, 읽을 수 없는 칸은 행과 열의 합만으로 값이 하나로 정해질 수도 있고 여러 값이 가능할 수도 있다.

각 칸에 대해, 읽을 수 있는 칸들과 모든 행·열의 합에 의해 그 값이 하나로 정해지는지 판단하라.

입력

입력에는 여러 개의 테스트 케이스가 있다. 각 테스트 케이스는 표의 크기를 나타내는 두 정수 NN과 MM(1≤N,M≤501 \le N, M \le 50)이 있는 줄로 시작한다. 이어지는 NN개의 줄에는 각각 MM개의 정수가 있는데, 아직 읽을 수 있는 칸은 0 이상 100 이하의 값이고, 읽을 수 없는 칸은 −1-1이다.

표 다음에는 두 줄이 더 온다. 첫 줄에는 NN개의 정수로 위에서 아래로 각 행의 합이, 둘째 줄에는 MM개의 정수로 왼쪽에서 오른쪽으로 각 열의 합이 주어진다. 모든 행과 열의 합은 0 이상 5000 이하이다.

입력은 두 개의 0이 있는 줄로 끝나며, 이 줄은 테스트 케이스가 아니다.

주어지는 모든 표는 유효함이 보장된다. 즉, 읽을 수 없는 칸들을 0 이상 100 이하의 정수로 채워서 모든 행과 열의 합을 맞출 수 있는 방법이 존재한다.

출력

각 테스트 케이스에 대해, 복구한 표를 NN개의 줄에 각 줄 MM개의 항목으로 출력한다.

입력에서 읽을 수 있던 칸은 그 값을 출력한다. 읽을 수 없던 칸은, 읽을 수 있는 칸들과 모든 행·열의 합에 부합하는 0 이상 100 이하의 정수가 정확히 하나뿐이면 그 값을 출력하고, 그렇지 않으면 −1-1을 출력한다.

한 줄에서 연속한 항목은 공백 한 칸으로 구분하고, 줄 끝에 공백을 남기지 않으며, 테스트 케이스 사이에 빈 줄을 출력하지 않는다.

예제1

  1. 예제 1

    입력
    2 2
    1 -1
    -1 -1
    100 100
    100 100
    5 5
    -1 -1 6 -1 8
    -1 -1 0 4 2
    3 -1 -1 5 -1
    4 0 2 -1 -1
    2 1 5 -1 -1
    21 10 15 13 14
    18 6 17 15 17
    2 3
    1 2 3
    3 5 6
    6 14
    4 7 9
    0 0
    
    예상 출력
    1 99
    99 1
    -1 -1 6 0 8
    -1 -1 0 4 2
    3 3 4 5 0
    4 0 2 -1 -1
    2 1 5 -1 -1
    1 2 3
    3 5 6