rt,洛谷在线 IDE 也是可以跑的,有没有佬浇浇这是为什么
#include <bits/stdc++.h>
template<class T> void read(T &x) {
x = 0; T f = 1; char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') f = -1;
for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - 48; x *= f;
}
template<class T> void write(T x) {
if (x > 9) write(x / 10); putchar(x % 10 + 48);
}
template<class T> void print(T x, char ed = '\n') {
if (x < 0) putchar('-'), x = -x; write(x), putchar(ed);
}
using namespace std; const int N = 41, mod = 10; int n, m;
struct mat1 {
int r, c, a[N][N];
void init(int n, int m, int x) {
r = n; c = m;
for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) a[i][j] = x;
}
mat1 operator+(const mat1 &o) const {
mat1 ans; ans.init(r, c, 0);
for (int i = 1; i <= r; ++i)
for (int j = 1; j <= c; ++j) ans.a[i][j] = (a[i][j] + o.a[i][j]) % mod;
return ans;
}
mat1 operator*(const mat1 &o) const {
mat1 ans; ans.init(r, o.c, 0);
for (int i = 1; i <= r; ++i)
for (int j = 1; j <= o.c; ++j)
for (int k = 1; k <=c; ++k)
ans.a[i][j] = (ans.a[i][j] + a[i][k] * o.a[k][j]) % mod;
return ans;
}
void out() {
for (int i = 1; i <= r; ++i) {
for (int j = 1; j < c; ++j) print(a[i][j], ' '); print(a[i][c]);
}
}
} A1;
mat1 I0(int n, int m) { mat1 ret; ret.init(n, m, 0); return ret; }
mat1 I1(int n) {
mat1 ret = I0(n, n); for (int i = 1; i <= n; ++i) ret.a[i][i] = 1; return ret;
}
struct mat2 {
int r, c; mat1 a[N][N];
void init(int n, int m, mat1 x) {
r = n; c = m;
for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) a[i][j] = x;
}
mat2 operator+(const mat2 &o) const {
mat2 ans; ans.init(r, c, I0(n, n));
for (int i = 1; i <= r; ++i)
for (int j = 1; j <= c; ++j) ans.a[i][j] = (a[i][j] + o.a[i][j]);
return ans;
}
mat2 operator*(const mat2 &o) const {
mat2 ans; ans.init(r, o.c, I0(n, n));
for (int i = 1; i <= r; ++i)
for (int j = 1; j <= o.c; ++j)
for (int k = 1; k <= c; ++k)
ans.a[i][j] = ans.a[i][j] + (a[i][k] * o.a[k][j]);
return ans;
}
} I2, F, G;
mat2 qpow2(mat2 u, int v) {
mat2 r = I2; for (; v; u = u * u, v >>= 1) if (v & 1) r = r * u; return r;
}
signed main() {
while (1) {
read(n); read(m); if (!n) return 0; A1.init(n, n, 0);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j) read(A1.a[i][j]), A1.a[i][j] %= mod;
I2.init(2, 2, I0(n, n)); I2.a[1][1] = I2.a[2][2] = I1(n);
F.init(1, 2, I0(n, n)); F.a[1][1] = F.a[1][2] = A1;
G.init(2, 2, I0(n, n)); G.a[1][1] = G.a[1][2] = A1; G.a[2][2] = I1(n);
(F * qpow2(G, m - 1)).a[1][2].out(); puts("");
}
}