输入一个正整数 n(2 <= n <= 10^6),以及 n 个不同的正整数(范围在1<=a[i]<=n)。这个数可以理解为n的一种排列,假设 (1 , 2 , 3, 4,……,n)是第1个排列,( n, n-1, ......, 1)是最后一个排列,根据这n个数组成的排列,输出下一个排列,每一个数后输出一个空格;若这n个数已经是最一个排列,输出“No Next Permutation”。
输入:5
1 2 5 4 3
输出:
1 3 2 4 5
var
n,num,i,mid,t:longint;
a,b:array[1..1000000] of longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
num:=0;
i:=n;
while i>1 do
begin
if a[i]<a[i-1] then
begin
inc(num); b[num]:=a[i];
end
else
begin
inc(num); b[num]:=a[i];
inc(num); b[num]:=a[i-1];
mid:=i-2;
break;
end;
dec(i)
end;
if i=1 then writeln('No Next Permutation')
else
begin
for i:=1 to num-1 do
if b[i]>b[num] then
begin
t:=b[i];b[i]:=b[num];b[num]:=t;
break;
end;
for i:=1 to mid do write(a[i],' ');
write(b[num],' ');
for i:=1 to num-1 do write(b[i],' ') ;
writeln;
end;
end.