행렬 거듭제곱

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

문제

정수 행렬을 주어진 지수만큼 거듭제곱하는 프로그램을 작성하라. 단, 모든 곱셈과 덧셈은 법 $M$에 대한 모듈로 산술로 수행한다. 즉, 계산 과정에서 얻어지는 각 성분은 항상 $M$으로 나눈 나머지로 유지한다.

두 행렬을 곱할 때 결과 행렬의 각 성분은 대응하는 행과 열의 성분끼리 곱한 값들의 합을 법 $M$으로 나눈 나머지이다. 예컨대 법 $17$에서는

$$\begin{pmatrix} 1 & 2 \ 3 & 4 \end{pmatrix} \times \begin{pmatrix} 1 & 2 \ 3 & 4 \end{pmatrix} = \begin{pmatrix} (1\cdot1 + 2\cdot3) \bmod 17 & (1\cdot2 + 2\cdot4) \bmod 17 \ (3\cdot1 + 4\cdot3) \bmod 17 & (3\cdot2 + 4\cdot4) \bmod 17 \end{pmatrix} = \begin{pmatrix} 7 & 10 \ 15 & 5 \end{pmatrix}$$

이 되므로, 위 행렬을 법 $17$에서 $2$제곱하면 오른쪽의 결과 행렬을 얻는다.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋의 첫 줄에는 공백 하나로 구분된 세 정수 $N$, $M$, $P$가 주어진다.

  • $1 \le N \le 100$: 행렬의 크기 ($N \times N$)
  • $1 \le M \le 32000$: 모듈로 연산의 법
  • $1 \le P \le 32000$: 행렬을 거듭제곱할 지수

이어지는 $N$개의 줄에는 행렬의 각 행이 순서대로 주어지며, 각 줄에는 $N$개의 정수 $i$ ($0 \le i < M$)가 공백 하나로 구분되어 있다.

입력의 끝은 세 정수가 모두 $0$인 줄(0 0 0)로 표시되며, 이 줄은 처리하지 않는다.

출력

각 데이터셋에 대해 거듭제곱한 결과 행렬의 $N$개 행을 출력한다. 각 행은 한 줄에 출력하며, 성분들은 공백 하나로 구분한다.

서로 다른 데이터셋의 출력 사이에는 빈 줄 하나를 넣어 구분한다. 마지막 데이터셋의 출력 뒤에는 빈 줄을 추가하지 않는다.