
Primonimo는 n×m 격자판에서 하는 게임이다. 각 칸에는 1 이상 p 이하의 정수가 적혀 있고, p는 소수다. 한 번의 수는 칸 하나를 고르는 것이고, 고른 칸과 같은 행에 있거나 같은 열에 있는 모든 칸의 수가 1씩 커진다. 고른 칸은 그 행과 그 열에 모두 속하지만 1만 커진다. p가 적혀 있던 칸은 1로 돌아간다.
모든 칸이 p가 되면 게임을 이긴다. 처음 판이 주어질 때 게임을 이기는 수열을 찾아라.
칸에는 행 우선 순서로 1부터 nm까지 번호를 붙인다. i행 j열(둘 다 1부터 센다)에 있는 칸의 번호는 (i−1)m+j다.
입력은 테스트 케이스 하나로 이루어진다. 첫 줄에 정수 세 개 n, m, p가 주어진다. n은 행의 개수(1≤n≤20), m은 열의 개수(1≤m≤20), p는 소수(2≤p≤97)다. 다음 n개 줄에는 각각 1 이상 p 이하의 정수가 m개씩 주어진다.
이기는 수열이 없으면 −1을 출력한다.
있으면 다음 규칙으로 답을 하나로 정한다. 고르는 순서는 결과를 바꾸지 않으므로 각 칸을 몇 번 골랐는지만 따지면 된다. 칸 t를 고른 횟수를 xt라 하고, 0≤xt≤p−1인 횟수 벡터만 생각한다. 이기는 횟수 벡터가 여럿이면 사전순으로 가장 작은 (x1,x2,…,xnm)을 고른다. 즉 x1이 가장 작은 것을 고르고, 그런 것이 여럿이면 x2가 가장 작은 것을 고르는 식이다.
첫 줄에 k=x1+⋯+xnm을 출력한다. 둘째 줄에 고른 칸 번호 k개를 번호가 작은 것부터 출력하되, 번호 t는 xt번 반복해서 적는다. k=0이면 둘째 줄은 비운다. 이렇게 정한 k는 항상 p⋅n⋅m 이하다.