#include <iostream> using namespace std; struct matrix { int data[10][10]; int row; int col; matrix(int r) { row = col = r; } matrix operator* (matrix B); }; matrix matrix::operator* (matrix B) { matrix ans(row); for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { ans.data[i][j]=0; for (int k = 0; k < row; k++) { ans.data[i][j] += data[i][k] * B.data[k][j]; } } } return ans; } void print(matrix A) { for (int i = 0; i < A.row; i++) { for (int j = 0; j < A.col; j++) { cout << A.data[i][j]; if (j == A.col - 1) cout << endl; else cout << ' '; } } } int main() { int n, k; while (cin >> n >> k) { // 注意 while 处理多个 case // cout << a + b << endl; matrix A = matrix(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { int temp; cin >> temp; A.data[i][j] = temp; } } matrix ans=matrix(n); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i==j) ans.data[i][j]=1; else ans.data[i][j]=0; } } for(int i=0;i<k;i++){ ans=ans*A; } print(ans); } } // 64 位输出请用 printf("%lld")