만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

행렬 점화식

시간 제한5초메모리 제한512 MB

요약
행렬 A, B와 인덱스 c_i가 주어집니다. M_i는 M_{c_i}부터 M_{i-1}까지의 곱에 B를 곱한 값이며, mod 아래에서 M_n을 구합니다.
난이도

보통10점 중 7점

유형
행렬, 슬라이딩 윈도우, 동적 계획법
정답자
아직 제출이 없습니다

문제

Bobo가 새로운 행렬 수열 M0,M1,…,MnM_0, M_1, \dots, M_n을 다음과 같이 정의한다.

  • M0=AM_0 = A
  • Mi=(∏j=cii−1Mj)×BM_i = \left(\prod_{j = c_i}^{i - 1} M_j\right) \times B

m×mm \times m 행렬 AA, BB와 정수 c1,c2,…,cnc_1, c_2, \dots, c_n이 주어진다. Zmod\mathbb{Z}_{\mathrm{mod}}에서 MnM_n을 구하라. 즉, 수의 덧셈과 곱셈은 모두 mod\mathrm{mod}로 나눈 나머지에서 계산한다.

입력

입력은 0개 이상의 테스트 케이스로 이루어지며, 파일 끝(EOF)에서 끝난다. 각 테스트 케이스는 다음과 같다.

첫 줄에 세 정수 nn, mm, mod\mathrm{mod}가 주어진다 (1≤n≤1061 \leq n \leq 10^6, 1≤m≤51 \leq m \leq 5, 2≤mod≤1092 \leq \mathrm{mod} \leq 10^9).

이어지는 mm개 줄의 ii번째 줄에는 Ai,1,Ai,2,…,Ai,mA_{i,1}, A_{i,2}, \dots, A_{i,m}이 주어진다. 그다음 mm개 줄의 ii번째 줄에는 Bi,1,Bi,2,…,Bi,mB_{i,1}, B_{i,2}, \dots, B_{i,m}이 주어진다 (0≤Ai,j,Bi,j<mod0 \leq A_{i,j}, B_{i,j} < \mathrm{mod}).

마지막 줄에는 nn개의 정수 c1,c2,…,cnc_1, c_2, \dots, c_n이 주어진다 (0≤ci<i0 \leq c_i < i, c1≤c2≤⋯≤cnc_1 \leq c_2 \leq \dots \leq c_n).

모든 테스트 케이스의 nn을 합하면 10610^6을 넘지 않는다.

출력

각 테스트 케이스마다 mm개 줄을 출력한다. ii번째 줄에는 Ci,1,Ci,2,…,Ci,mC_{i,1}, C_{i,2}, \dots, C_{i,m}을 출력한다. 여기서 Ci,j=Mn,i,jC_{i,j} = M_{n,i,j}이다.

예제1

  1. 예제 1

    입력
    2 2 1000000000
    1 1
    0 1
    1 0
    0 1
    0 0
    2 2 2
    1 1
    0 1
    1 0
    0 1
    0 0
    5 2 1000000000
    1 1
    0 1
    1 0
    0 1
    0 1 2 3 4
    
    예상 출력
    1 2
    0 1
    1 0
    0 1
    1 1
    0 1