const
  max_n = 20;
type
   matice = array[1..max_n,1..max_n] of integer;

var
  n : integer;

procedure generuj_matici(var A:matice);
var
  i,j:integer;
begin
  for i:=1 to n do
    for j:=1 to n do a[i,j]:=random(8)+1;
end;

procedure vypis_matici(A:matice);
var
  i,j:integer;
begin
  writeln('Vypis matice');
  writeln('============');
  for i:=1 to n do
  begin
    for j:=1 to n do write(a[i,j],' ');
    writeln;
  end;
end;

function mocni_matici(A:matice; m:integer):matice;
var
  i,j,k:integer;
  c,b:matice;
begin
  if m>1 then 
  begin
    B:=mocni_matici(A,m-1);
    for i:=1 to n do
      for j:=1 to n do
      begin
       c[i,j]:=0;
       for k:=1 to n do c[i,j] += b[i,k]*a[k,j];
     end;
     mocni_matici:=C;
  end else mocni_matici:=A;
end;

var
  A,B:matice;
  m:integer;

begin
  randomize;
  n:=random(2)+2;
  generuj_matici(A);
  vypis_matici(A);
  write('Zadej mocninu: ');
  readln(m);
  B:=mocni_matici(A,m);
  vypis_matici(B);
end.
