program lxw006; const nn=20; type row=array [1..20] of shortint; var p: row; n,i: integer; num:longint; procedure wrtperm(n:integer; var s:row); var i:integer; begin for i:=1 to n do write(s[i]:3); writeln; end; procedure perm(n:integer; var p:row; var i:integer); var j,j1,j2,t,m:integer; begin i:=n; repeat dec(i) until (p[i]<p[i+1]) or (i<1); if i>0 then begin j:=i+1; for t:=i+1 to n do if p[i]<p[t] then j:=t; m:=p[i]; p[i]:=p[j]; p[j]:=m; t:=(n-i) div 2; for j:=1 to t do begin j1:=i+j; j2:=n-j+1; m:=p[j1]; p[j1]:=p[j2]; p[j2]:=m; end; end; end; begin {main} writeln("输入N:(<=20)"); readln(n); num:=1; for i:=1 to n do p[i]:=i; i:=1; while i>0 do begin wrtperm(n,p); perm(n,p,i); if i>0 then inc(num); end; writeln("num=",num); end.