#include <stdio.h>

#define NMAX 100

void mz_soma(int n,
	     double x[][NMAX], double y[][NMAX], double z[][NMAX]);


void mz_escalar_prod(int n, double c,
		     double x[][NMAX], double y[][NMAX]);

void mz_prod(int n,
	     double x[][NMAX], double y[][NMAX], double z[][NMAX]);

void mz_exp(int n, int k, double x[][NMAX], double y[][NMAX]);


void leia_mz(int n, double x[][NMAX]);

void imprima_mz(int n, double x[][NMAX]);

int main()
{
  int n, k;
  double a[NMAX][NMAX], r[NMAX][NMAX];
  
  scanf("%d", &n);  
  scanf("%d", &k);

  leia_mz(n,a);
  imprima_mz(n,a);

  mz_exp(n, k, a, r);

  imprima_mz(n,r);

  return 0;
}

void mz_soma(int n,
	     double x[][NMAX], double y[][NMAX], double z[][NMAX])
{
  int i, j;

  for (i=0; i<n; i++)
    for (j=0; j<n; j++)
      z[i][j]=x[i][j]+y[i][j];
}


void mz_escalar_prod(int n, double c,
		     double x[][NMAX], double y[][NMAX])
{
  int i, j;

  for (i=0; i<n; i++)
    for (j=0; j<n; j++)
      y[i][j]=c*x[i][j];
}

void mz_prod(int n,
	     double x[][NMAX], double y[][NMAX], double z[][NMAX])
{

  int i, j, k;
  double s;

  for (i=0; i<n; i++)
    for (j=0; j<n; j++) {
      s=0;
      for (k=0; k<n; k++)
	s+=x[i][k]*y[k][j];
      z[i][j]=s;
    }
}

void mz_ident(int n, double x[][NMAX])
{
  int i, j;

  for (i=0; i<n; i++)
    for (j=0; j<n; j++)
      x[i][j]=0;

  for (i=0; i<n; i++)
    x[i][i]=1;
}  

void mz_copy(int n, double a[][NMAX], double b[][NMAX])
{
  int i, j;

  for (i=0; i<n; i++)
    for (j=0; j<n; j++)
      b[i][j]=a[i][j];
}
  

void mz_exp(int n, int k, double x[][NMAX], double y[][NMAX])
{
  int i, j, kk;
  double s[NMAX][NMAX], p[NMAX][NMAX], q[NMAX][NMAX];

  for (i=0; i<n; i++)
    for (j=0; j<n; j++)
      s[i][j]=0;

  mz_ident(n, s);
  mz_ident(n, p);

  for (kk=1; kk<=k; kk++) {
    mz_prod(n,x,p,q);
    mz_escalar_prod(n,1.0/kk,q,q);
    mz_copy(n,q,p);
    mz_soma(n,s,p,s);
  }

  mz_copy(n,s,y);
}


void leia_mz(int n, double x[][NMAX])
{
  int i, j;
  
  for (i=0; i<n; i++)
    for (j=0; j<n; j++)
      scanf("%lf", &x[i][j]);

}

void imprima_mz(int n, double x[][NMAX])
{
  int i, j;
  
  for (i=0; i<n; i++) {
    for (j=0; j<n; j++)
      printf("%g ", x[i][j]);
    putchar('\n');
  }
}


