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 nasob_matici(A,B:matice):matice;
var
  i,j,k:integer;
  c:matice;
begin
  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] += a[i,k]*b[k,j];
   end;
   nasob_matici:=c;
end;

var
  A,B:matice;
  i,m:integer;

begin
  randomize;
  n:=random(2)+2;
  generuj_matici(A);
  vypis_matici(A);
  write('Zadej mocninu: ');
  readln(m);
  B:=A;
  for i:=1 to m-1 do  B:=nasob_matici(B,A);
  vypis_matici(B);
end.
