{ генерация перестановок }
uses crt;
const n = 4; { количество элементов в перестановке}
var a:array[1..n] of integer;
j:integer;{счетчик}
kol : longint;{количество перестановок}
procedure generate (l,r:integer;var k:longint);
var i,v:integer;
begin
if (l=r) then
begin
for i:=1 to n do write(a[i],' ');
writeln;
k:=k+1;
end
else
begin
for i := l to r do
begin
v:=a[l]; a[l]:=a[i]; a[i]:=v; {обмен a[i],a[l]}
generate(l+1,r,k); {вызов новой генерации}
v:=a[l]; a[l]:=a[i]; a[i]:=v; {обмен a[i],a[l]}
end;
end;
end;
begin
clrscr;
for j := 1 to N do
A[j]:=j-1;
generate( 1,n,kol);
writeln('kol=',kol);
readln
end.