#include<iostream>
using namespace std;
int matrix[10][10];//用大数组来记录矩阵
int result[10][10];//用来记录计算结果矩阵
int tmpResult[10][10];
//输入矩阵
void colect(int &n)
{
int i= 0;
int j= 0;
for(i =0 ;i < n; i++)
{
for(j =0; j< n; j++)
{
cin >>matrix[i][j];
result[i][j] = matrix[i][j];
}
}
}
//某一行乘以一列
int rowTimeCol(int &row ,int &col ,int &n)
{
int i =0;
int tmp =0;
for(i =0; i< n; i++)
{
tmp += result[row][i] * matrix[i][col];
}
return tmp;
}
//
void calculateOnce(int &n)
{
int i =0;
int j =0;
int p=0;
int q =0;
for(i =0; i< n; i++)
{
for(j =0; j<n; j++)
{
tmpResult[i][j] = rowTimeCol(i,j,n);
}
}
for(p =0; p< n; p++)
{
for(q =0; q<n; q++)
{
result[p][q] = tmpResult[p][q];
}
}
}
//计算k次幂
void calculate(int &n,int &k)
{
int i =0;
for(i=0 ; i< k-1; i++)
{
calculateOnce(n);
}
}
//输出矩阵
void print(int &n)
{
int i =0;
int j =0;
for(i =0; i < n; i++)
{
for(j=0; j < n; j++)
{
if(j !=0)
{
cout << " " ;
}
cout << result[i][j];
}
cout << endl;
}
}
int main()
{
int T;//记录要求矩阵的个数
int n;//记录矩阵行和列数
int k; //记录k次幂
cin >> T;//输入几组测试数据
for(int i =0; i< T; i++)
{
cin >> n >> k;
colect(n);//输入n阶矩阵
calculate(n,k);//计算k次幂
print(n);
}
return 0;
}
/**************************************************************
Problem: 1474
User: itswyy
Language: C++
Result: Accepted
Time:10 ms
Memory:1520 kb
****************************************************************/