#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef long long LL; const LL Mod=1e9+7; int n; LL k; struct Matrix{ static const int N=101; int n; LL h[N][N]; void clear(int n){ this->n=n; memset(h,0,sizeof(h)); } friend ostream& operator << (ostream&,Matrix&); friend istream& operator >> (istream&,Matrix&); Matrix operator * (const Matrix &t) const{ Matrix b;b.clear(n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++){ LL sum=0; for(int k=1;k<=n;k++)sum+=h[i][k]*t.h[k][j],sum%=Mod; b.h[i][j]=sum; } return b; } Matrix operator ^ (LL k)const { Matrix t=(*this),ans=(*this); for(k--;k;k>>=1,t=t*t) if(k&1)ans=ans*t; return ans; } }a; istream& operator >> (istream& input,Matrix &x){ for(int i=1;i<=x.n;i++) for(int j=1;j<=x.n;j++)input>>x.h[i][j]; return input; } ostream& operator << (ostream& output,Matrix &x){ for(int i=1;i<=x.n;i++){ for(int j=1;j<=x.n;j++)output<<x.h[i][j]<<" "; output<<endl; } return output; } int main(){ ios::sync_with_stdio(false); cin>>n>>k; a.clear(n); cin>>a; Matrix ans=a^k; cout<<ans; return 0; }