#P3390. 【模板】矩阵快速幂

【模板】矩阵快速幂

题目背景

一个 m×nm \times n矩阵是一个由 mmnn 列元素排列成的矩形阵列。即形如

$$A = \begin{bmatrix} a_{1 1} & a_{1 2} & \cdots & a_{1 n} \\ a_{2 1} & a_{2 2} & \cdots & a_{2 n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m 1} & a_{m 2} & \cdots & a_{m n} \end{bmatrix} \text{.} $$

本题中认为矩阵中的元素 aija_{i j} 是整数。

两个大小分别为 m×nm \times nn×pn \times p 的矩阵 A,BA, B 相乘的结果为一个大小为 m×pm \times p 的矩阵。将结果矩阵记作 CC,则

$$c_{i j} = \sum_{k = 1}^{n} a_{i k} b_{k j} \text{,\qquad($1 \le i \le m$, $1 \le j \le p$).} $$

而如果 AA 的列数与 BB 的行数不相等,则无法进行乘法。

可以验证,矩阵乘法满足结合律,即 (AB)C=A(BC)(A B) C = A (B C)

一个大小为 n×nn \times n 的矩阵 AA 可以与自身进行乘法,得到的仍是大小为 n×nn \times n 的矩阵,记作 A2=A×AA^2 = A \times A。进一步地,还可以递归地定义任意高次方 Ak=A×Ak1A^k = A \times A^{k - 1},或称 $A^k = \underbrace{A \times A \times \cdots \times A}_{k \text{ 次}}$。

特殊地,定义 A0A^0 为单位矩阵 $I = \begin{bmatrix} 1 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \end{bmatrix}$。

题目描述

给定 n×nn\times n 的矩阵 AA,求 AkA^k

输入格式

第一行两个整数 n,kn,k
接下来 nn 行,每行 nn 个整数,第 ii 行的第 jj 的数表示 Ai,jA_{i,j}

输出格式

输出 AkA^k

nn 行,每行 nn 个数,第 ii 行第 jj 个数表示 (Ak)i,j(A^k)_{i,j},每个元素对 109+710^9+7 取模。

2 1
1 1
1 1
1 1
1 1

提示

【数据范围】

对于 100%100\% 的数据,1n1001\le n \le 1000k10120 \le k \le 10^{12}Ai,j1000|A_{i,j}| \le 1000