Qualcuno potrebbe darmi una mano nel capire questo programma:

program esercizio5;
uses crt;
const n =2; n1=n-1; m=2;
type a=array[1..n] of byte;
var v:a;
var j,l,u:byte; h,c:longint;
label la;
procedure scambia(var c1,c2:byte); var c3:byte;
begin
c3:=c1; c1:=c2; c2:=c3;
end;

begin
clrscr;
for j:=1 to n do v[j]:=j-1; c:=0;
for h:=1 to m do
begin
if (v[n] mod 2=1) then begin
u:=0; l:=1;
repeat
if v[l]+v[l+1]=n1 then
inc(u);
inc(l,2);
until l>=n;
if u=n div 2 then begin
for j:=1 to n do
write(v[j]);
writeln;
inc(c) end;
end;

for l:=n downto 2 do
for j:=n downto l do begin
if v[j]>v[l-1] then begin
scambia(v[l-1],v[j]);
for u:=0 to trunc((n-l-1)/2) do
scambia(v[n-u],v[l+u]);
goto la;
end;
end;
la:end;
writeln (c)
end.

Grazie mille..