program wardrobe3;
Uses Strutils;
const MAX = 5000000;
type elenco = array[1..MAX] of string[1];
var m,k,i,j,w:qword;
numero, count : qword;
cod : longint;
cifre, stringadainvertire, stringainvertita, stringaordinata, Sconinv : Ansistring;
arrnum :array [1..MAX] of string[1];
arrpsw :array [1..MAX+2] of qword;
uscita:boolean;
procedure scambia (var x,y: string);
var t:string;
begin
t:=x;
x:=y;
y:=t;
end;
procedure scambiach (var x,y: char);
var t:char;
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-1);
stringainvertita:=ReverseString(Sdainv);
Sconinv:=Sprefix+stringainvertita;
end;
Procedure nextPermutation (var P : ansistring) ;
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;
if pivot = 0 then uscita:=true;
(* find the element from the right that is greater than pivot*)
for i := m downto pivot+1 do
if (P[i] > P[pivot]) then begin scambiach (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 Sconinv:=P
else inversione (P, pivot+1, Sconinv);
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');
uscita:=false; val(stringaordinata,arrpsw[1],cod); w:=2;
while uscita=false do begin nextPermutation(stringadainvertire); stringadainvertire:=Sconinv; val(Sconinv,arrpsw[w],cod); w:=w+1; end;
writeln(w-1);
for i:=1 to w-1 do
for j:=w-1 downto 1 do if (arrpsw[j]-arrpsw[i]) mod k =0 then begin writeln(arrpsw[i]); writeln(arrpsw[j]); exit; end;
writeln('-1');
end.
cHJvZ3JhbSB3YXJkcm9iZTM7ClVzZXMgU3RydXRpbHM7CmNvbnN0IE1BWCA9IDUwMDAwMDA7CnR5cGUgZWxlbmNvID0gYXJyYXlbMS4uTUFYXSBvZiBzdHJpbmdbMV07CnZhciBtLGssaSxqLHc6cXdvcmQ7CiAgICBudW1lcm8sIGNvdW50IDogcXdvcmQ7CiAgICBjb2QgOiBsb25naW50OwogICAgY2lmcmUsIHN0cmluZ2FkYWludmVydGlyZSwgc3RyaW5nYWludmVydGl0YSwgc3RyaW5nYW9yZGluYXRhLCBTY29uaW52IDogQW5zaXN0cmluZzsKICAgIGFycm51bSA6YXJyYXkgWzEuLk1BWF0gb2YgIHN0cmluZ1sxXTsKICAgIGFycnBzdyA6YXJyYXkgWzEuLk1BWCsyXSBvZiBxd29yZDsKICAgIHVzY2l0YTpib29sZWFuOwogICAgCnByb2NlZHVyZSBzY2FtYmlhICh2YXIgeCx5OiBzdHJpbmcpOwp2YXIgdDpzdHJpbmc7CmJlZ2luCiAgIHQ6PXg7CiAgIHg6PXk7CiAgIHk6PXQ7CmVuZDsgIApwcm9jZWR1cmUgc2NhbWJpYWNoICh2YXIgeCx5OiBjaGFyKTsKdmFyIHQ6Y2hhcjsKYmVnaW4KICAgdDo9eDsKICAgeDo9eTsKICAgeTo9dDsKZW5kOyAKUHJvY2VkdXJlIG9yZGluYW1lbnRvIChlc3RyZW1vaSxlc3RyZW1vczogcXdvcmQ7IHZhciB2IDogZWxlbmNvOyBvcmRpbmF0bzpib29sZWFuKTsKdmFyIGluZiwgc3VwLCBtZWRpbzpxd29yZDsKICAgIHBpdm90IDpzdHJpbmdbMV07CmJlZ2luCiAgICBpbmY6PWVzdHJlbW9pOwogICAgc3VwOj1lc3RyZW1vczsKICAgIG1lZGlvOj0gKGVzdHJlbW9pK2VzdHJlbW9zKSBkaXYgMjsKICAgIHBpdm90Oj12W21lZGlvXTsKICAgIHJlcGVhdAogICAgICBpZiAob3JkaW5hdG8pIHRoZW4KICAgICAgICAgYmVnaW4KICAgICAgICAgICAgd2hpbGUgKHZbaW5mXTxwaXZvdCkgZG8gIGluZjo9aW5mKzE7CiAgICAgICAgICAgIHdoaWxlICh2W3N1cF0+cGl2b3QpIGRvICBzdXA6PXN1cC0xOwogICAgICAgICBlbmQ7CiAgICAgIGlmIGluZjw9c3VwIHRoZW4KICAgICAgIGJlZ2luCiAgICAgICAgIHNjYW1iaWEodltpbmZdLHZbc3VwXSk7CiAgICAgICAgIGluZjo9aW5mKzE7CiAgICAgICAgIHN1cDo9c3VwLTE7CiAgICAgICBlbmQ7CiAgICB1bnRpbCBpbmY+c3VwOwogICAgaWYgKGVzdHJlbW9pPHN1cCkgdGhlbiBvcmRpbmFtZW50byhlc3RyZW1vaSxzdXAsdixvcmRpbmF0byk7CiAgICBpZiAoaW5mPGVzdHJlbW9zKSB0aGVuIG9yZGluYW1lbnRvKGluZixlc3RyZW1vcyx2LG9yZGluYXRvKTsKZW5kOyAKClByb2NlZHVyZSBpbnZlcnNpb25lICh4OkFuc2lzdHJpbmc7IGluaXppbzpxd29yZDsgIHZhciBTY29uaW52OmFuc2lzdHJpbmcpOwogdmFyIFNkYWludixTcHJlZml4IDogYW5zaXN0cmluZzsKIGJlZ2luCiAgICAgY291bnQ6PW0taW5pemlvKzE7IFNwcmVmaXg6PScnOyAKICAgICBTZGFpbnY6PWNvcHkoeCxpbml6aW8sIGNvdW50KTsgCiAgICAgU3ByZWZpeDo9Y29weSh4LCAxLCBpbml6aW8tMSk7IAogICAgIHN0cmluZ2FpbnZlcnRpdGE6PVJldmVyc2VTdHJpbmcoU2RhaW52KTsKICAgICBTY29uaW52Oj1TcHJlZml4K3N0cmluZ2FpbnZlcnRpdGE7CiBlbmQ7ICAKClByb2NlZHVyZSBuZXh0UGVybXV0YXRpb24gKHZhciBQIDogYW5zaXN0cmluZykgOwp2YXIgcGl2b3Q6cXdvcmQ7ICAgCiAgICgqIEZpbmQgdGhlIHBpdm90IGluZGV4KikKYmVnaW4gCiAgICBwaXZvdCA6PSAwOyAKICAgIGZvciBpIDo9IG0gLSAxIGRvd250byAxIGRvCiAgICAgICAgICAgICAgICAgICAgaWYgKFBbaV0gPCBQW2kgKyAxXSkgdGhlbiBiZWdpbiBwaXZvdDo9aTsgYnJlYWs7IGVuZDsKICAgIGlmIHBpdm90ID0gMCB0aGVuIHVzY2l0YTo9dHJ1ZTsKICAgICAgICgqIGZpbmQgdGhlIGVsZW1lbnQgZnJvbSB0aGUgcmlnaHQgdGhhdCBpcyBncmVhdGVyIHRoYW4gcGl2b3QqKQogICAgZm9yIGkgOj0gbSAgZG93bnRvIHBpdm90KzEgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFtpXSA+IFBbcGl2b3RdKSAgdGhlbiBiZWdpbiBzY2FtYmlhY2ggKFBbaV0sIFBbcGl2b3RdKTsgYnJlYWs7IGVuZDsKICAgICAgKCpSZXZlcnNlIHRoZSBlbGVtZW50cyBmcm9tIHBpdm90ICsgMSB0byB0aGUgZW5kIHRvIGdldCB0aGUgbmV4dCBwZXJtdXRhdGlvbiopCiAgICBpZiBwaXZvdCsxPW0gdGhlbiBTY29uaW52Oj1QCiAgICAgICAgICAgICAgICAgZWxzZSBpbnZlcnNpb25lIChQLCBwaXZvdCsxLCBTY29uaW52KTsKICAgICAgICAgICAgICAgIAplbmQ7CiAgICAgICAKYmVnaW4KCXJlYWRsbihtLGspOwoJcmVhZGxuKGNpZnJlKTsKICAgICAgICAgICAgICAgICAgICgqICBYOj1SZXZlcnNlU3RyaW5nKGNpZnJlKTsgd3JpdGVsbiAoWCk7KikKCWZvciBpOj0xIHRvIG0gZG8gYXJybnVtW2ldOj1jb3B5KGNpZnJlLGksMSk7CiAgICBvcmRpbmFtZW50byAoMSxtLGFycm51bSwgdHJ1ZSk7CiAgICBzdHJpbmdhb3JkaW5hdGE6PScnOyBTY29uaW52Oj0nJzsKICAgIGZvciBpOj0xIHRvIG0gZG8gc3RyaW5nYW9yZGluYXRhOj1zdHJpbmdhb3JkaW5hdGErYXJybnVtW2ldOwogICAgKCp2YWwoY2lmcmUsbnVtZXJvLGNvZCk7IAogICAgd3JpdGVsbiAobnVtZXJvKTsKICAgIGludmVyc2lvbmUgKGNpZnJlLCAzLCBzdHJpbmdhaW52ZXJ0aXRhKTsKICAgIHdyaXRlbG4oc3RyaW5nYWludmVydGl0YSk7KikKICAgIHN0cmluZ2FkYWludmVydGlyZTo9c3RyaW5nYW9yZGluYXRhOwogICAgZm9yIGk6PTEgdG8gbSBkbyB3cml0ZShhcnJudW1baV0pOyB3cml0ZWxuKCdvbycpOwogICAgdXNjaXRhOj1mYWxzZTsgdmFsKHN0cmluZ2FvcmRpbmF0YSxhcnJwc3dbMV0sY29kKTsgdzo9MjsKICAgIHdoaWxlIHVzY2l0YT1mYWxzZSBkbyBiZWdpbiAgbmV4dFBlcm11dGF0aW9uKHN0cmluZ2FkYWludmVydGlyZSk7IHN0cmluZ2FkYWludmVydGlyZTo9U2NvbmludjsgdmFsKFNjb25pbnYsYXJycHN3W3ddLGNvZCk7IHc6PXcrMTsgZW5kOwogICAgd3JpdGVsbih3LTEpOwogICAgZm9yIGk6PTEgdG8gdy0xIGRvCiAgICAgICAgICAgICAgICBmb3Igajo9dy0xIGRvd250byAxIGRvIGlmIChhcnJwc3dbal0tYXJycHN3W2ldKSBtb2QgayA9MCB0aGVuIGJlZ2luIHdyaXRlbG4oYXJycHN3W2ldKTsgd3JpdGVsbihhcnJwc3dbal0pOyBleGl0OyBlbmQ7CiAgICB3cml0ZWxuKCctMScpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAplbmQuCg==