program ex(input,output); var i,j,k,m,n:integer; a:array[1..100] of integer; available: array[1..100] of integer; procedure out; var i:integer; begin for i:=1 to n do write(a[i]:2); {readln;} writeln end; procedure swap(i,j:integer); var w:integer; begin w:=a[i]; a[i]:=a[j]; a[j]:=w; end; function minimum(k:integer):integer; var i,j,temp:integer; begin j:=0; temp:=99; for i:=k to n do if (a[i]a[k-1]) then begin temp:=a[i]; j:=i end; minimum:=j; end; procedure reverse(k:integer); var i:integer; begin for i:=k to (k+n-1) div 2 do swap(i, n-i+k); end; procedure perm(k:integer); var i,j:integer; begin if k<=n-1 then for i:=k to n do begin perm(k+1); if i<>n then begin reverse(k+1); j:=minimum(k+1); swap(k,j); out end end end; begin {main program} readln(n); for i:=1 to n do a[i]:=i; out; perm(1); out; readln end.