Primonimo

아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

Primonimo는 n×mn \times m 격자판에서 하는 게임이다. 각 칸에는 11 이상 pp 이하의 정수가 적혀 있고, pp는 소수다. 한 번의 수는 칸 하나를 고르는 것이고, 고른 칸과 같은 행에 있거나 같은 열에 있는 모든 칸의 수가 11씩 커진다. 고른 칸은 그 행과 그 열에 모두 속하지만 11만 커진다. pp가 적혀 있던 칸은 11로 돌아간다.

모든 칸이 pp가 되면 게임을 이긴다. 처음 판이 주어질 때 게임을 이기는 수열을 찾아라.

칸에는 행 우선 순서로 11부터 nmnm까지 번호를 붙인다. iijj열(둘 다 1부터 센다)에 있는 칸의 번호는 (i1)m+j(i-1)m + j다.

입력

입력은 테스트 케이스 하나로 이루어진다. 첫 줄에 정수 세 개 nn, mm, pp가 주어진다. nn은 행의 개수(1n201 \le n \le 20), mm은 열의 개수(1m201 \le m \le 20), pp는 소수(2p972 \le p \le 97)다. 다음 nn개 줄에는 각각 11 이상 pp 이하의 정수가 mm개씩 주어진다.

출력

이기는 수열이 없으면 1-1을 출력한다.

있으면 다음 규칙으로 답을 하나로 정한다. 고르는 순서는 결과를 바꾸지 않으므로 각 칸을 몇 번 골랐는지만 따지면 된다. 칸 tt를 고른 횟수를 xtx_t라 하고, 0xtp10 \le x_t \le p-1인 횟수 벡터만 생각한다. 이기는 횟수 벡터가 여럿이면 사전순으로 가장 작은 (x1,x2,,xnm)(x_1, x_2, \ldots, x_{nm})을 고른다. 즉 x1x_1이 가장 작은 것을 고르고, 그런 것이 여럿이면 x2x_2가 가장 작은 것을 고르는 식이다.

첫 줄에 k=x1++xnmk = x_1 + \cdots + x_{nm}을 출력한다. 둘째 줄에 고른 칸 번호 kk개를 번호가 작은 것부터 출력하되, 번호 ttxtx_t번 반복해서 적는다. k=0k = 0이면 둘째 줄은 비운다. 이렇게 정한 kk는 항상 pnmp \cdot n \cdot m 이하다.