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

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

냉장고 자물쇠

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

요약
각각 3개에서 49개의 양의 정수를 표시한 K개의 고리와 K개의 일차방정식이 주어질 때, 모든 방정식을 만족하도록 고리마다 수를 하나씩 골라 출력한다.
난이도

보통10점 중 6점

유형
완전 탐색, 수학, 백트래킹, 구현
정답자
아직 제출이 없습니다

문제

한 열쇠 수리공이 냉장고 문에 달린 화면에 표시된 특이한 자물쇠를 열어 달라는 부탁을 받았다.

이 자물쇠는 KK개의 동심원(고리)으로 이루어져 있다. 각 고리에는 양의 정수 여러 개가 표시되어 있다. 각 고리에서 정확히 하나씩 수를 골라, 고른 KK개의 수가 KK개의 단서를 모두 만족시키면 문이 열린다.

고리를 바깥쪽부터 R1R_1, 안쪽으로 갈수록 R2,…,RKR_2, \ldots, R_K로 번호를 매기고, RiR_i는 고리 ii에서 고른 수도 함께 나타낸다고 하자. 각 단서는 이 고른 값들에 대한 일차방정식이다.

c1R1+c2R2+⋯+cKRK=bc_1 R_1 + c_2 R_2 + \cdots + c_K R_K = b

각 단서는 이미 정수 계수 c1,c2,…,cKc_1, c_2, \ldots, c_K와 우변 bb로 분해되어 주어지며, 바깥 고리부터 안쪽 고리 순서로 나열된다. 예를 들어 (고리가 3개일 때) "바깥 고리에서 가운데 고리의 두 배를 뺀 값이 00이다"라는 단서는 계수 줄 1 -2 0 = 0으로 표현된다.

계수는 음수, 00, 양수 모두 될 수 있다. 단서들은 언제나 자물쇠를 여는 선택을 정확히 하나로 확정한다.

고리들과 단서들을 읽어, 자물쇠를 여는 유일한 선택을 바깥 고리부터 안쪽 고리 순서로 출력하여라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 다음과 같이 주어진다.

  • 고리의 개수(이자 단서의 개수)인 정수 KK가 한 줄에 주어진다. 이때 3≤K≤93 \le K \le 9이다.
  • 이어서 KK줄에 걸쳐, 바깥 고리부터 안쪽 고리까지 각 고리에 표시된 수들이 한 줄에 하나의 고리씩 공백으로 구분되어 주어진다. 한 고리에는 33개 이상 4949개 이하의 수가 표시되며, 고리마다 개수가 다를 수 있다.
  • 이어서 KK줄에 걸쳐 단서가 한 줄에 하나씩 주어진다. 각 단서 줄은 KK개의 정수 계수, 그다음 토큰 =, 그다음 정수 우변으로 이루어진다: c_1 c_2 ... c_K = b.

고리에 표시되는 각 수는 11 이상 9999 이하이다. 한 줄에 0 하나만 있으면 입력의 끝을 뜻하며 처리하지 않는다.

출력

각 테스트 케이스마다, 고른 수들을 바깥 고리부터 안쪽 고리 순서로 공백 하나로 구분하여 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    3
    11 4 2 15 7 10 9 2
    4 8 1 12 7 11 6 5
    3 4 1 13 2 14
    1 -2 0 = 0
    0 1 1 = 7
    -1 1 3 = 1
    0
    
    예상 출력
    10 5 2