program Permutace; procedure swap(var a, b : char); var p : char; begin p := a; a := b; b := p; end; var perm : string; N, i, j : integer; begin readln(perm); N := length(perm); i := N; while (i > 1) and (perm[i-1] > perm[i]) do dec(i); { Hledáme zbytek } if i > 1 then begin for j := 0 to (N-i-1) div 2 do swap(perm[j+i], perm[N-j]); { Setřídíme zbytek } j := i; dec(i); while (perm[i] > perm[j]) do { Najdeme nejbližší vyšší prvek než prvek přilehlý } inc(j); swap(perm[i], perm[j]); { Zaměníme je } writeln(perm); end else { Pokud takový neexistuje, permutace byla poslední } writeln('Dopermutovali jsme'); end.