{ реурсивные алгоритмы: генерация перестановок }
const n = 3; { количество элементов в перестановке}
var   a:array[1..n] of integer;
      index : integer;

procedure generate (l,r:integer);
var i,v:integer;
begin
      if (l=r) then begin
        for i:=1 to n do write(a[i],' ');
        writeln;
      end else begin
        for i := l to r do begin
           v:=a[l]; a[l]:=a[i]; a[i]:=v; {обмен a[i],a[j]}
           generate(l+1,r);              {вызов новой генерации}
           v:=a[l]; a[l]:=a[i]; a[i]:=v; {обмен a[i],a[j]}
        end;
      end;
end;

begin
      for index := 1 to N do A[index]:=index;
      generate( 1,n );
end.
