행렬 거듭제곱

면접 대비

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

요약
정방행렬, 모듈러스, 지수가 주어질 때 모든 원소를 M으로 나눈 나머지로 유지하면서 행렬을 주어진 거듭제곱으로 계산한다.
난이도

보통10점 중 4점

유형
행렬, 분할 정복, 수학
정답자
아직 제출이 없습니다

문제

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

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

(1234)×(1234)=((1⋅1+2⋅3) mod 17(1⋅2+2⋅4) mod 17(3⋅1+4⋅3) mod 17(3⋅2+4⋅4) mod 17)=(710155)\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}

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

입력

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

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

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

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

출력

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

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

예제3

  1. 예제 1

    입력
    2 17 2
    1 2
    3 4
    0 0 0
    
    예상 출력
    7 10
    15 5
    
  2. 예제 2

    입력
    2 17 1
    1 2
    3 4
    0 0 0
    
    예상 출력
    1 2
    3 4
    
  3. 예제 3

    입력
    1 100 10
    2
    0 0 0
    
    예상 출력
    24