#include <iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
struct Matrix {
int row, col;
int matrix[10][10];
Matrix(int r, int c): row(r), col(c) {}
};
void printMatrix(Matrix res) {
for (int i = 0; i < res.row; i++) {
for (int j = 0; j < res.col; j++) {
cout << res.matrix[i][j] << " ";
}
cout << "\n";
}
}
Matrix multiMatrix(Matrix A, Matrix B) {
Matrix res(A.row, B.col);
for (int i = 0; i < A.row; i++) {
for (int j = 0; j < B.col; j++) {
res.matrix[i][j] = 0;
for (int k = 0; k < A.col; k++) {
res.matrix[i][j] += A.matrix[i][k] * B.matrix[k][j];
}
}
}
return res;
}
//求k次幂
Matrix matricExp(Matrix A, int k) {
Matrix res(A.row, A.col);
for (int i = 0; i < A.row; i++) {
for (int j = 0; j < A.col; j++) {
if (i == j) {
res.matrix[i][j] = 1;
} else {
res.matrix[i][j] = 0;
}
}
}
while (k != 0) {
if (k % 2 == 1) { //如果最后一位为1
res = multiMatrix(res, A);
}
A = multiMatrix(A, A); //下一次循环时,最后一位的权值
k /= 2;
// cout<<"当前矩阵为\n";
// printMatrix(res);
}
return res;
}
int main() {
int n, k;
while (scanf("%d%d", &n, &k) != EOF) {
Matrix A(n, n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &A.matrix[i][j]);
// cout<<"test1:"<<A.matrix[i][j]<<" "<<"\n";
}
}
// printMatrix(A);
Matrix answer = matricExp(A, k);
printMatrix(answer);
}
return 0;
}