행렬 거듭제곱
면접 대비시간 제한1초메모리 제한128 MB
정방행렬, 모듈러스, 지수가 주어질 때 모든 원소를 M으로 나눈 나머지로 유지하면서 행렬을 주어진 거듭제곱으로 계산한다.
문제
정수 행렬을 주어진 지수만큼 거듭제곱하는 프로그램을 작성하라. 단, 모든 곱셈과 덧셈은 법 에 대한 모듈로 산술로 수행한다. 즉, 계산 과정에서 얻어지는 각 성분은 항상 으로 나눈 나머지로 유지한다.
두 행렬을 곱할 때 결과 행렬의 각 성분은 대응하는 행과 열의 성분끼리 곱한 값들의 합을 법 으로 나눈 나머지이다. 예컨대 법 에서는
이 되므로, 위 행렬을 법 에서 제곱하면 오른쪽의 결과 행렬을 얻는다.
입력
입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋의 첫 줄에는 공백 하나로 구분된 세 정수 , , 가 주어진다.
- : 행렬의 크기 ()
- : 모듈로 연산의 법
- : 행렬을 거듭제곱할 지수
이어지는 개의 줄에는 행렬의 각 행이 순서대로 주어지며, 각 줄에는 개의 정수 ()가 공백 하나로 구분되어 있다.
입력의 끝은 세 정수가 모두 인 줄(0 0 0)로 표시되며, 이 줄은 처리하지 않는다.
출력
각 데이터셋에 대해 거듭제곱한 결과 행렬의 개 행을 출력한다. 각 행은 한 줄에 출력하며, 성분들은 공백 하나로 구분한다.
서로 다른 데이터셋의 출력 사이에는 빈 줄 하나를 넣어 구분한다. 마지막 데이터셋의 출력 뒤에는 빈 줄을 추가하지 않는다.