program wardrobe3;
Uses Strutils;
const MAX = 5000000 ;
type elenco = array [ 1 .. MAX ] of string [ 1 ] ;
var m, k, i, j, w: qword;
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
Sdainv: = '' ; Sprefix: = '' ;
count: = m- inizio+ 1 ;
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 point does not exist, exit dalla procedura perchè, essendo l'array ordinato, ho già trovato tutte le permutazioni*)
if pivot = 0 then begin uscita: = true ; exit; end ;
(* 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
(*assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);*)
readln ( m, k) ;
readln ( cifre) ;
for i: = 1 to m do arrnum[ i] : = copy( cifre, i, 1 ) ; (*trasformo la stringa di input in un array per ordinarlo in modo crescente*)
ordinamento ( 1 , m, arrnum, true ) ;
stringaordinata: = '' ; Sconinv: = '' ;
for i: = 1 to m do stringaordinata: = stringaordinata+ arrnum[ i] ; (*ritorno da array a stringa per applicare le procedure*)
stringadainvertire: = stringaordinata;
uscita: = false ; w: = 1 ;
while ( uscita= false ) do
begin
if Stringadainvertire[ 1 ] <>'0' then (*se la stringadainvertire rappresenta un numero che non inizia con zero lo trasformo in numero e lo memorizzo nell'array arrpsw*)
begin
val( stringadainvertire, arrpsw[ w] , cod) ;
w: = w+ 1 ;
end ;
nextPermutation( stringadainvertire) ;
stringadainvertire: = Sconinv;
end ;
for i: = 1 to w- 1 do (*confronto a coppie tutti i numeri di arrpsw per trovare la coppia la cui differenza è multipla di k*)
for j: = i+ 1 to w- 1 do
if ( ( arrpsw[ j] mod k- arrpsw[ i] mod k) mod k = 0 ) and ( ( arrpsw[ j] <> arrpsw[ i] ) ) then
begin
writeln ( arrpsw[ i] ) ; writeln ( arrpsw[ j] ) ;
exit;
end ;
writeln ( '-1' ) ;
end .
cHJvZ3JhbSB3YXJkcm9iZTM7ClVzZXMgU3RydXRpbHM7CmNvbnN0IE1BWCA9IDUwMDAwMDA7CnR5cGUgZWxlbmNvID0gYXJyYXlbMS4uTUFYXSBvZiBzdHJpbmdbMV07CnZhciBtLGssaSxqLHc6cXdvcmQ7CiAgICBjb3VudCA6IHF3b3JkOwogICAgY29kIDogbG9uZ2ludDsKICAgIGNpZnJlLCBzdHJpbmdhZGFpbnZlcnRpcmUsIHN0cmluZ2FpbnZlcnRpdGEsIHN0cmluZ2FvcmRpbmF0YSwgU2NvbmludiA6IEFuc2lzdHJpbmc7CiAgICBhcnJudW0gOmFycmF5IFsxLi5NQVhdIG9mICBzdHJpbmdbMV07CiAgICBhcnJwc3cgOmFycmF5IFsxLi5NQVgrMl0gb2YgcXdvcmQ7CiAgICB1c2NpdGE6Ym9vbGVhbjsKICAgIApwcm9jZWR1cmUgc2NhbWJpYSAodmFyIHgseTogc3RyaW5nKTsKdmFyIHQ6c3RyaW5nOwpiZWdpbgogICB0Oj14OwogICB4Oj15OwogICB5Oj10OwplbmQ7ICAKcHJvY2VkdXJlIHNjYW1iaWFjaCAodmFyIHgseTogY2hhcik7CnZhciB0OmNoYXI7CmJlZ2luCiAgIHQ6PXg7CiAgIHg6PXk7CiAgIHk6PXQ7CmVuZDsgClByb2NlZHVyZSBvcmRpbmFtZW50byAoZXN0cmVtb2ksZXN0cmVtb3M6IHF3b3JkOyB2YXIgdiA6IGVsZW5jbzsgb3JkaW5hdG86Ym9vbGVhbik7CnZhciBpbmYsIHN1cCwgbWVkaW86cXdvcmQ7CiAgICBwaXZvdCA6c3RyaW5nWzFdOwpiZWdpbgogICAgaW5mOj1lc3RyZW1vaTsKICAgIHN1cDo9ZXN0cmVtb3M7CiAgICBtZWRpbzo9IChlc3RyZW1vaStlc3RyZW1vcykgZGl2IDI7CiAgICBwaXZvdDo9dlttZWRpb107CiAgICByZXBlYXQKICAgICAgaWYgKG9yZGluYXRvKSB0aGVuCiAgICAgICAgIGJlZ2luCiAgICAgICAgICAgIHdoaWxlICh2W2luZl08cGl2b3QpIGRvICBpbmY6PWluZisxOwogICAgICAgICAgICB3aGlsZSAodltzdXBdPnBpdm90KSBkbyAgc3VwOj1zdXAtMTsKICAgICAgICAgZW5kOwogICAgICBpZiBpbmY8PXN1cCB0aGVuCiAgICAgICBiZWdpbgogICAgICAgICBzY2FtYmlhKHZbaW5mXSx2W3N1cF0pOwogICAgICAgICBpbmY6PWluZisxOwogICAgICAgICBzdXA6PXN1cC0xOwogICAgICAgZW5kOwogICAgdW50aWwgaW5mPnN1cDsKICAgIGlmIChlc3RyZW1vaTxzdXApIHRoZW4gb3JkaW5hbWVudG8oZXN0cmVtb2ksc3VwLHYsb3JkaW5hdG8pOwogICAgaWYgKGluZjxlc3RyZW1vcykgdGhlbiBvcmRpbmFtZW50byhpbmYsZXN0cmVtb3MsdixvcmRpbmF0byk7CmVuZDsgCgpQcm9jZWR1cmUgaW52ZXJzaW9uZSAoeDpBbnNpc3RyaW5nOyBpbml6aW86cXdvcmQ7ICB2YXIgU2NvbmludjphbnNpc3RyaW5nKTsKIHZhciBTZGFpbnYsU3ByZWZpeCA6IGFuc2lzdHJpbmc7CiBiZWdpbgogICAgIFNkYWludjo9Jyc7U3ByZWZpeDo9Jyc7CiAgICAgY291bnQ6PW0taW5pemlvKzE7IAogICAgIFNkYWludjo9Y29weSh4LGluaXppbywgY291bnQpOyAKICAgICBTcHJlZml4Oj1jb3B5KHgsIDEsIGluaXppby0xKTsgCiAgICAgc3RyaW5nYWludmVydGl0YTo9UmV2ZXJzZVN0cmluZyhTZGFpbnYpOwogICAgIFNjb25pbnY6PVNwcmVmaXgrc3RyaW5nYWludmVydGl0YTsKIGVuZDsgIAoKUHJvY2VkdXJlIG5leHRQZXJtdXRhdGlvbiAodmFyIFAgOiBhbnNpc3RyaW5nKSA7CnZhciBwaXZvdDpxd29yZDsgICAKICAgKCogRmluZCB0aGUgcGl2b3QgaW5kZXgqKQpiZWdpbiAKICAgIHBpdm90IDo9IDA7IAogICAgZm9yIGkgOj0gbSAtIDEgZG93bnRvIDEgZG8KICAgICAgICAgICAgICAgICAgICBpZiAoUFtpXSA8IFBbaSArIDFdKSB0aGVuIGJlZ2luIHBpdm90Oj1pOyBicmVhazsgZW5kOwogICAgICAoKklmIHBpdm90IHBvaW50IGRvZXMgbm90IGV4aXN0LCAgZXhpdCBkYWxsYSBwcm9jZWR1cmEgcGVyY2jDqCwgZXNzZW5kbyBsJ2FycmF5IG9yZGluYXRvLCBobyBnacOgIHRyb3ZhdG8gdHV0dGUgbGUgcGVybXV0YXppb25pKikKICAgIGlmIHBpdm90ID0gMCB0aGVuIGJlZ2luIHVzY2l0YTo9dHJ1ZTsgZXhpdDsgZW5kOyAKICAgICAgICgqIGZpbmQgdGhlIGVsZW1lbnQgZnJvbSB0aGUgcmlnaHQgdGhhdCBpcyBncmVhdGVyIHRoYW4gcGl2b3QqKQogICAgZm9yIGkgOj0gbSAgZG93bnRvIHBpdm90KzEgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUFtpXSA+IFBbcGl2b3RdKSAgdGhlbiBiZWdpbiBzY2FtYmlhY2ggKFBbaV0sIFBbcGl2b3RdKTsgYnJlYWs7IGVuZDsKICAgICAgKCpSZXZlcnNlIHRoZSBlbGVtZW50cyBmcm9tIHBpdm90ICsgMSB0byB0aGUgZW5kIHRvIGdldCB0aGUgbmV4dCBwZXJtdXRhdGlvbiopCiAgICBpZiBwaXZvdCsxPW0gdGhlbiBTY29uaW52Oj1QCiAgICAgICAgICAgICAgICAgZWxzZSBpbnZlcnNpb25lIChQLCBwaXZvdCsxLCBTY29uaW52KTsKZW5kOwogICAgICAgCmJlZ2luCiAgICAoKmFzc2lnbihpbnB1dCwgICdpbnB1dC50eHQnKTsgIHJlc2V0KGlucHV0KTsKICAgIGFzc2lnbihvdXRwdXQsICdvdXRwdXQudHh0Jyk7IHJld3JpdGUob3V0cHV0KTsqKQogICAgcmVhZGxuKG0sayk7CiAgICByZWFkbG4oY2lmcmUpOwogICAgZm9yIGk6PTEgdG8gbSBkbyBhcnJudW1baV06PWNvcHkoY2lmcmUsaSwxKTsgKCp0cmFzZm9ybW8gbGEgc3RyaW5nYSBkaSBpbnB1dCBpbiB1biBhcnJheSBwZXIgb3JkaW5hcmxvIGluIG1vZG8gY3Jlc2NlbnRlKikKICAgIG9yZGluYW1lbnRvICgxLG0sYXJybnVtLCB0cnVlKTsKICAgIHN0cmluZ2FvcmRpbmF0YTo9Jyc7IFNjb25pbnY6PScnOwogICAgZm9yIGk6PTEgdG8gbSBkbyBzdHJpbmdhb3JkaW5hdGE6PXN0cmluZ2FvcmRpbmF0YSthcnJudW1baV07ICgqcml0b3JubyBkYSBhcnJheSBhIHN0cmluZ2EgcGVyIGFwcGxpY2FyZSBsZSBwcm9jZWR1cmUqKQogICAgc3RyaW5nYWRhaW52ZXJ0aXJlOj1zdHJpbmdhb3JkaW5hdGE7CiAgICB1c2NpdGE6PWZhbHNlOyB3Oj0xOyAgICAKICAgIHdoaWxlICh1c2NpdGE9ZmFsc2UpICBkbyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgU3RyaW5nYWRhaW52ZXJ0aXJlWzFdPD4nMCcgdGhlbiAgKCpzZSBsYSBzdHJpbmdhZGFpbnZlcnRpcmUgcmFwcHJlc2VudGEgdW4gbnVtZXJvIGNoZSBub24gaW5pemlhIGNvbiB6ZXJvIGxvIHRyYXNmb3JtbyBpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJvIGUgbG8gbWVtb3JpenpvIG5lbGwnYXJyYXkgYXJycHN3KikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwoc3RyaW5nYWRhaW52ZXJ0aXJlLGFycnBzd1t3XSxjb2QpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzo9dysxOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRQZXJtdXRhdGlvbihzdHJpbmdhZGFpbnZlcnRpcmUpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdhZGFpbnZlcnRpcmU6PVNjb25pbnY7IAogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7CiAgICBmb3IgaTo9MSB0byB3LTEgZG8gICAgKCpjb25mcm9udG8gYSBjb3BwaWUgdHV0dGkgaSBudW1lcmkgZGkgYXJycHN3IHBlciB0cm92YXJlIGxhIGNvcHBpYSBsYSBjdWkgZGlmZmVyZW56YSDDqCBtdWx0aXBsYSBkaSBrKikKICAgICAgICAgICAgICAgIGZvciBqOj1pKzEgdG8gdy0xIGRvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYXJycHN3W2pdIG1vZCBrLWFycnBzd1tpXSBtb2QgaykgbW9kIGsgPTApIGFuZCAoKGFycnBzd1tqXSA8PiBhcnJwc3dbaV0gKSkgdGhlbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbG4oYXJycHN3W2ldKTsgd3JpdGVsbihhcnJwc3dbal0pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQ7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsKICAgIHdyaXRlbG4oJy0xJyk7IAplbmQuCg==