program wardrobe3;
Uses Strutils;
const MAX = 5000000;
type elenco = array[1..MAX] of string[1];
var m,k,i,PP, z :qword;
numero, count : qword;
cod : longint;
cifre, X, stringadainvertire, stringainvertita, stringaordinata, Sconinv : Ansistring;
ccifre : array[1..MAX] of integer;
potenzadieci : array [0..MAX] of qword;
arrnum, P :array [1..MAX] of string[1];
procedure scambia (var x,y: string);
var t:string;
begin
t:=x;
x:=y;
y:=t;
end;
Procedure ordinamento (estremoi,estremos: qword; var v : elenco; ordinato:boolean);
var inf, sup, medio:qword;
pivot :string[1];
begin
inf:=estremoi;
sup:=estremos;
medio:= (estremoi+estremos) div 2;
pivot:=v[medio];
repeat
if (ordinato) then
begin
while (v[inf]<pivot) do inf:=inf+1;
while (v[sup]>pivot) do sup:=sup-1;
end;
if inf<=sup then
begin
scambia(v[inf],v[sup]);
inf:=inf+1;
sup:=sup-1;
end;
until inf>sup;
if (estremoi<sup) then ordinamento(estremoi,sup,v,ordinato);
if (inf<estremos) then ordinamento(inf,estremos,v,ordinato);
end;
Procedure inversione (x:Ansistring; inizio:qword; var Sconinv:ansistring);
var Sdainv,Sprefix : ansistring;
begin
count:=m-inizio+1; Sprefix:='';
Sdainv:=copy(x,inizio, count);
Sprefix:=copy(x, 1, inizio-2);
stringainvertita:=ReverseString(Sdainv);
Sconinv:=Sprefix+stringainvertita;
end;
Procedure nextPermutation (P : elenco) ;
var pivot:qword;
(* Find the pivot index*)
begin
pivot := 0;
for i := m - 1 downto 1 do
if (P[i] < P[i + 1]) then begin pivot:=i; break; end;
writeln(pivot);
if pivot = 0 then exit;
(* find the element from the right that is greater than pivot*)
for i := m downto pivot+1 do
begin
if (P[i] > P[pivot]) then scambia(P[i], P[pivot]);
break;
end;
(* Reverse the elements from pivot + 1 to the end to get the next permutation*)
if pivot+1=m then for i:=1 to m do Sconinv:=Sconinv+P[i]
else inversione (stringadainvertire, pivot+1, Sconinv);
stringadainvertire:=Sconinv;
for i:=1 to m do arrnum[i]:=P[i];
end;
begin
readln(m,k);
readln(cifre);
(* X:=ReverseString(cifre); writeln (X);*)
for i:=1 to m do arrnum[i]:=copy(cifre,i,1);
ordinamento (1,m,arrnum, true);
stringaordinata:=''; Sconinv:='';
for i:=1 to m do stringaordinata:=stringaordinata+arrnum[i];
(*val(cifre,numero,cod);
writeln (numero);
inversione (cifre, 3, stringainvertita);
writeln(stringainvertita);*)
stringadainvertire:=stringaordinata;
for i:=1 to m do write(arrnum[i]); writeln('oo');
for z:=1 to 3 do begin nextPermutation(arrnum); writeln(Sconinv); end;
end.
cHJvZ3JhbSB3YXJkcm9iZTM7ClVzZXMgU3RydXRpbHM7CmNvbnN0IE1BWCA9IDUwMDAwMDA7CnR5cGUgZWxlbmNvID0gYXJyYXlbMS4uTUFYXSBvZiBzdHJpbmdbMV07CnZhciBtLGssaSxQUCwgeiA6cXdvcmQ7CiAgICBudW1lcm8sIGNvdW50IDogcXdvcmQ7CiAgICBjb2QgOiBsb25naW50OwogICAgY2lmcmUsIFgsIHN0cmluZ2FkYWludmVydGlyZSwgc3RyaW5nYWludmVydGl0YSwgc3RyaW5nYW9yZGluYXRhLCBTY29uaW52IDogQW5zaXN0cmluZzsKICAgIGNjaWZyZSA6IGFycmF5WzEuLk1BWF0gb2YgaW50ZWdlcjsKICAgIHBvdGVuemFkaWVjaSA6IGFycmF5IFswLi5NQVhdIG9mIHF3b3JkOwogICAgYXJybnVtLCBQIDphcnJheSBbMS4uTUFYXSBvZiAgc3RyaW5nWzFdOwogICAgCnByb2NlZHVyZSBzY2FtYmlhICh2YXIgeCx5OiBzdHJpbmcpOwp2YXIgdDpzdHJpbmc7CmJlZ2luCiAgIHQ6PXg7CiAgIHg6PXk7CiAgIHk6PXQ7CmVuZDsgIApQcm9jZWR1cmUgb3JkaW5hbWVudG8gKGVzdHJlbW9pLGVzdHJlbW9zOiBxd29yZDsgdmFyIHYgOiBlbGVuY287IG9yZGluYXRvOmJvb2xlYW4pOwp2YXIgaW5mLCBzdXAsIG1lZGlvOnF3b3JkOwogICAgcGl2b3QgOnN0cmluZ1sxXTsKYmVnaW4KICAgIGluZjo9ZXN0cmVtb2k7CiAgICBzdXA6PWVzdHJlbW9zOwogICAgbWVkaW86PSAoZXN0cmVtb2krZXN0cmVtb3MpIGRpdiAyOwogICAgcGl2b3Q6PXZbbWVkaW9dOwogICAgcmVwZWF0CiAgICAgIGlmIChvcmRpbmF0bykgdGhlbgogICAgICAgICBiZWdpbgogICAgICAgICAgICB3aGlsZSAodltpbmZdPHBpdm90KSBkbyAgaW5mOj1pbmYrMTsKICAgICAgICAgICAgd2hpbGUgKHZbc3VwXT5waXZvdCkgZG8gIHN1cDo9c3VwLTE7CiAgICAgICAgIGVuZDsKICAgICAgaWYgaW5mPD1zdXAgdGhlbgogICAgICAgYmVnaW4KICAgICAgICAgc2NhbWJpYSh2W2luZl0sdltzdXBdKTsKICAgICAgICAgaW5mOj1pbmYrMTsKICAgICAgICAgc3VwOj1zdXAtMTsKICAgICAgIGVuZDsKICAgIHVudGlsIGluZj5zdXA7CiAgICBpZiAoZXN0cmVtb2k8c3VwKSB0aGVuIG9yZGluYW1lbnRvKGVzdHJlbW9pLHN1cCx2LG9yZGluYXRvKTsKICAgIGlmIChpbmY8ZXN0cmVtb3MpIHRoZW4gb3JkaW5hbWVudG8oaW5mLGVzdHJlbW9zLHYsb3JkaW5hdG8pOwplbmQ7IAogUHJvY2VkdXJlIGludmVyc2lvbmUgKHg6QW5zaXN0cmluZzsgaW5pemlvOnF3b3JkOyAgdmFyIFNjb25pbnY6YW5zaXN0cmluZyk7CiB2YXIgU2RhaW52LFNwcmVmaXggOiBhbnNpc3RyaW5nOwogYmVnaW4KICAgICBjb3VudDo9bS1pbml6aW8rMTsgU3ByZWZpeDo9Jyc7IAogICAgIFNkYWludjo9Y29weSh4LGluaXppbywgY291bnQpOyAKICAgICBTcHJlZml4Oj1jb3B5KHgsIDEsIGluaXppby0yKTsgCiAgICAgc3RyaW5nYWludmVydGl0YTo9UmV2ZXJzZVN0cmluZyhTZGFpbnYpOwogICAgIFNjb25pbnY6PVNwcmVmaXgrc3RyaW5nYWludmVydGl0YTsKIGVuZDsgIAoKUHJvY2VkdXJlIG5leHRQZXJtdXRhdGlvbiAoUCA6IGVsZW5jbykgOwp2YXIgcGl2b3Q6cXdvcmQ7ICAgCiAgICgqIEZpbmQgdGhlIHBpdm90IGluZGV4KikKYmVnaW4gCiAgICBwaXZvdCA6PSAwOyAKICAgIGZvciBpIDo9IG0gLSAxIGRvd250byAxIGRvCiAgICAgICAgICAgICAgICAgICAgaWYgKFBbaV0gPCBQW2kgKyAxXSkgdGhlbiBiZWdpbiBwaXZvdDo9aTsgYnJlYWs7IGVuZDsKICAgICAgICAgICAgICAgICAgICB3cml0ZWxuKHBpdm90KTsKICAgIGlmIHBpdm90ID0gMCB0aGVuIGV4aXQ7CiAgICAgICAoKiBmaW5kIHRoZSBlbGVtZW50IGZyb20gdGhlIHJpZ2h0IHRoYXQgaXMgZ3JlYXRlciB0aGFuIHBpdm90KikKICAgIGZvciBpIDo9IG0gIGRvd250byBwaXZvdCsxIGRvCiAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFtpXSA+IFBbcGl2b3RdKSAgdGhlbiBzY2FtYmlhKFBbaV0sIFBbcGl2b3RdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICBlbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAoKiBSZXZlcnNlIHRoZSBlbGVtZW50cyBmcm9tIHBpdm90ICsgMSB0byB0aGUgZW5kIHRvIGdldCB0aGUgbmV4dCBwZXJtdXRhdGlvbiopCiAgICBpZiBwaXZvdCsxPW0gdGhlbiBmb3IgaTo9MSB0byBtIGRvIFNjb25pbnY6PVNjb25pbnYrUFtpXQogICAgICAgICAgICAgICAgIGVsc2UgaW52ZXJzaW9uZSAoc3RyaW5nYWRhaW52ZXJ0aXJlLCBwaXZvdCsxLCBTY29uaW52KTsKICAgCiAgICBzdHJpbmdhZGFpbnZlcnRpcmU6PVNjb25pbnY7CiAgICBmb3IgaTo9MSB0byBtIGRvIGFycm51bVtpXTo9UFtpXTsKICAgIAplbmQ7CiAgICAgICAKYmVnaW4KCXJlYWRsbihtLGspOwoJcmVhZGxuKGNpZnJlKTsKICAgICAgICAgICAgICgqICBYOj1SZXZlcnNlU3RyaW5nKGNpZnJlKTsgd3JpdGVsbiAoWCk7KikKCWZvciBpOj0xIHRvIG0gZG8gYXJybnVtW2ldOj1jb3B5KGNpZnJlLGksMSk7CiAgICBvcmRpbmFtZW50byAoMSxtLGFycm51bSwgdHJ1ZSk7CiAgICBzdHJpbmdhb3JkaW5hdGE6PScnOyBTY29uaW52Oj0nJzsKICAgIGZvciBpOj0xIHRvIG0gZG8gc3RyaW5nYW9yZGluYXRhOj1zdHJpbmdhb3JkaW5hdGErYXJybnVtW2ldOwogICAgKCp2YWwoY2lmcmUsbnVtZXJvLGNvZCk7IAogICAgd3JpdGVsbiAobnVtZXJvKTsKICAgIGludmVyc2lvbmUgKGNpZnJlLCAzLCBzdHJpbmdhaW52ZXJ0aXRhKTsKICAgIHdyaXRlbG4oc3RyaW5nYWludmVydGl0YSk7KikKICAgIHN0cmluZ2FkYWludmVydGlyZTo9c3RyaW5nYW9yZGluYXRhOwogICAgZm9yIGk6PTEgdG8gbSBkbyB3cml0ZShhcnJudW1baV0pOyB3cml0ZWxuKCdvbycpOwogICAgCiAgICBmb3Igejo9MSB0byAzIGRvIGJlZ2luIG5leHRQZXJtdXRhdGlvbihhcnJudW0pOyB3cml0ZWxuKFNjb25pbnYpOyBlbmQ7CmVuZC4K