program Panak_rekurzia;

const nmax=10; mmax=10;
type mat=array[1..mmax,1..nmax] of integer;
     prvok= record xx, yy: integer;
                   typ: integer
            end;
var m,n:integer;
    mm:mat;
    kk,p:integer;
    ii,jj:integer;
    pr:integer;
    rie: array [1..nmax+mmax+1] of prvok;
    pocp: integer;
    x, y, xn,yn:integer;
    k:integer;
    kon: integer;

procedure vypis(mm:mat; m,n:integer);
var i,j:integer;
begin
     for i:=1 to m do
     begin writeln;
           for j:=1 to n do
           write(mm[i,j]:3);
     end;
     writeln;
     readln;
end;{vypis}

procedure init(var mm:mat; m,n:integer);
var ii,jj:integer;
    kk:integer;
    p:integer;
begin
     for ii:=1 to m do
     for jj:=1 to n do mm[ii,jj]:=0;
     repeat
     kk:=random(m*n div 4);
     until kk>2;
     p:=0;
     while p<kk do
     begin
          ii:=1+random(m);
          jj:=1+random(n);
          if (mm[ii,jj]=0) and
             ((ii<>1) or (jj<>1)) and
             ((ii<>m) or (jj<>n)) then begin mm[ii,jj]:=1;
                                             p:=p+1;
                                       end;
      end;
end;{init}

begin
     writeln('Pocet riadkov a stlpcov :');
     readln(m,n);
     randomize;
     init(mm,m,n);
     vypis(mm,m,n);
     mm[1,1]:=-2;
     kon:=1;
     rie[kon].xx:=1; rie[kon].yy:=1; rie[kon].typ:=1;
     x:=1; y:=1;
     repeat
     k:=0;
     repeat
           k:=k+1;
           case k of
           1: begin xn:=x+1; yn:=y end;
           2: begin xn:=x; yn:=y+1 end
           end;
           if (xn<=m) and (yn<=n) then if (mm[xn,yn]=0) then
           begin
                mm[xn,yn]:=-2;
                inc(kon);
                rie[kon].xx:=xn; rie[kon].yy:=yn; rie[kon].typ:=k;
                x:=xn; y:=yn;
                writeln('k=',k:4,xn:3,yn:3);
                if (xn=m) and (yn=n) then
                       begin vypis(mm,m,n); inc(pr); end;
           end;
           if k<=2 then
           begin
                if kon<1 then begin writeln(' Exitujem'); exit; end;
                x:=rie[kon].xx; y:=rie[kon].yy; k:=rie[kon].typ;
                mm[x,y]:=0;
                dec(kon);
           end;
     until k>=2;
     until false;

     writeln(' Pocet rieseni: ', pr);
     readln
end.
