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
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( Sconinv, arrpsw[ w] , cod) ;
w: = w+ 1 ;
end ;
nextPermutation( stringadainvertire) ;
stringadainvertire: = Sconinv;
end ;
for i: = 1 to w - 2 do (*confronto a coppie tutti i numeri di arrpsw per trovare la coppia la cui differenza è multipla di k*)
for j: = w- 2 downto 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 .
cHJvZ3JhbSB3YXJkcm9iZTM7ClVzZXMgU3RydXRpbHM7CmNvbnN0IE1BWCA9IDUwMDAwMDA7CnR5cGUgZWxlbmNvID0gYXJyYXlbMS4uTUFYXSBvZiBzdHJpbmdbMV07CnZhciBtLGssaSxqLHc6cXdvcmQ7CiAgICBudW1lcm8sIGNvdW50IDogcXdvcmQ7CiAgICBjb2QgOiBsb25naW50OwogICAgY2lmcmUsIHN0cmluZ2FkYWludmVydGlyZSwgc3RyaW5nYWludmVydGl0YSwgc3RyaW5nYW9yZGluYXRhLCBTY29uaW52IDogQW5zaXN0cmluZzsKICAgIGFycm51bSA6YXJyYXkgWzEuLk1BWF0gb2YgIHN0cmluZ1sxXTsKICAgIGFycnBzdyA6YXJyYXkgWzEuLk1BWCsyXSBvZiBxd29yZDsKICAgIHVzY2l0YTpib29sZWFuOwogICAgCnByb2NlZHVyZSBzY2FtYmlhICh2YXIgeCx5OiBzdHJpbmcpOwp2YXIgdDpzdHJpbmc7CmJlZ2luCiAgIHQ6PXg7CiAgIHg6PXk7CiAgIHk6PXQ7CmVuZDsgIApwcm9jZWR1cmUgc2NhbWJpYWNoICh2YXIgeCx5OiBjaGFyKTsKdmFyIHQ6Y2hhcjsKYmVnaW4KICAgdDo9eDsKICAgeDo9eTsKICAgeTo9dDsKZW5kOyAKUHJvY2VkdXJlIG9yZGluYW1lbnRvIChlc3RyZW1vaSxlc3RyZW1vczogcXdvcmQ7IHZhciB2IDogZWxlbmNvOyBvcmRpbmF0bzpib29sZWFuKTsKdmFyIGluZiwgc3VwLCBtZWRpbzpxd29yZDsKICAgIHBpdm90IDpzdHJpbmdbMV07CmJlZ2luCiAgICBpbmY6PWVzdHJlbW9pOwogICAgc3VwOj1lc3RyZW1vczsKICAgIG1lZGlvOj0gKGVzdHJlbW9pK2VzdHJlbW9zKSBkaXYgMjsKICAgIHBpdm90Oj12W21lZGlvXTsKICAgIHJlcGVhdAogICAgICBpZiAob3JkaW5hdG8pIHRoZW4KICAgICAgICAgYmVnaW4KICAgICAgICAgICAgd2hpbGUgKHZbaW5mXTxwaXZvdCkgZG8gIGluZjo9aW5mKzE7CiAgICAgICAgICAgIHdoaWxlICh2W3N1cF0+cGl2b3QpIGRvICBzdXA6PXN1cC0xOwogICAgICAgICBlbmQ7CiAgICAgIGlmIGluZjw9c3VwIHRoZW4KICAgICAgIGJlZ2luCiAgICAgICAgIHNjYW1iaWEodltpbmZdLHZbc3VwXSk7CiAgICAgICAgIGluZjo9aW5mKzE7CiAgICAgICAgIHN1cDo9c3VwLTE7CiAgICAgICBlbmQ7CiAgICB1bnRpbCBpbmY+c3VwOwogICAgaWYgKGVzdHJlbW9pPHN1cCkgdGhlbiBvcmRpbmFtZW50byhlc3RyZW1vaSxzdXAsdixvcmRpbmF0byk7CiAgICBpZiAoaW5mPGVzdHJlbW9zKSB0aGVuIG9yZGluYW1lbnRvKGluZixlc3RyZW1vcyx2LG9yZGluYXRvKTsKZW5kOyAKClByb2NlZHVyZSBpbnZlcnNpb25lICh4OkFuc2lzdHJpbmc7IGluaXppbzpxd29yZDsgIHZhciBTY29uaW52OmFuc2lzdHJpbmcpOwogdmFyIFNkYWludixTcHJlZml4IDogYW5zaXN0cmluZzsKIGJlZ2luCiAgICAgU2RhaW52Oj0nJztTcHJlZml4Oj0nJzsKICAgICBjb3VudDo9bS1pbml6aW8rMTsgCiAgICAgU2RhaW52Oj1jb3B5KHgsaW5pemlvLCBjb3VudCk7IAogICAgIFNwcmVmaXg6PWNvcHkoeCwgMSwgaW5pemlvLTEpOyAKICAgICBzdHJpbmdhaW52ZXJ0aXRhOj1SZXZlcnNlU3RyaW5nKFNkYWludik7CiAgICAgU2Nvbmludjo9U3ByZWZpeCtzdHJpbmdhaW52ZXJ0aXRhOwogZW5kOyAgCgpQcm9jZWR1cmUgbmV4dFBlcm11dGF0aW9uICh2YXIgUCA6IGFuc2lzdHJpbmcpIDsKdmFyIHBpdm90OnF3b3JkOyAgIAogICAoKiBGaW5kIHRoZSBwaXZvdCBpbmRleCopCmJlZ2luIAogICAgcGl2b3QgOj0gMDsgCiAgICBmb3IgaSA6PSBtIC0gMSBkb3dudG8gMSBkbwogICAgICAgICAgICAgICAgICAgIGlmIChQW2ldIDwgUFtpICsgMV0pIHRoZW4gYmVnaW4gcGl2b3Q6PWk7IGJyZWFrOyBlbmQ7CiAgICAgICgqSWYgcGl2b3QgcG9pbnQgZG9lcyBub3QgZXhpc3QsICBleGl0IGRhbGxhIHByb2NlZHVyYSBwZXJjaMOoLCBlc3NlbmRvIGwnYXJyYXkgb3JkaW5hdG8sIGhvIGdpw6AgdHJvdmF0byB0dXR0ZSBsZSBwZXJtdXRhemlvbmkqKQogICAgaWYgcGl2b3QgPSAwIHRoZW4gYmVnaW4gdXNjaXRhOj10cnVlOyBleGl0OyBlbmQ7IAogICAgICAgKCogZmluZCB0aGUgZWxlbWVudCBmcm9tIHRoZSByaWdodCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBwaXZvdCopCiAgICBmb3IgaSA6PSBtICBkb3dudG8gcGl2b3QrMSBkbwogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQW2ldID4gUFtwaXZvdF0pICB0aGVuIGJlZ2luIHNjYW1iaWFjaCAoUFtpXSwgUFtwaXZvdF0pOyBicmVhazsgZW5kOwogICAgICAoKlJldmVyc2UgdGhlIGVsZW1lbnRzIGZyb20gcGl2b3QgKyAxIHRvIHRoZSBlbmQgdG8gZ2V0IHRoZSBuZXh0IHBlcm11dGF0aW9uKikKICAgIGlmIHBpdm90KzE9bSB0aGVuIFNjb25pbnY6PVAKICAgICAgICAgICAgICAgICBlbHNlIGludmVyc2lvbmUgKFAsIHBpdm90KzEsIFNjb25pbnYpOwplbmQ7CiAgICAgICAKYmVnaW4KICAgICgqYXNzaWduKGlucHV0LCAgJ2lucHV0LnR4dCcpOyAgcmVzZXQoaW5wdXQpOwogICAgYXNzaWduKG91dHB1dCwgJ291dHB1dC50eHQnKTsgcmV3cml0ZShvdXRwdXQpOyopCiAgICByZWFkbG4obSxrKTsKICAgIHJlYWRsbihjaWZyZSk7CiAgICBmb3IgaTo9MSB0byBtIGRvIGFycm51bVtpXTo9Y29weShjaWZyZSxpLDEpOyAoKnRyYXNmb3JtbyBsYSBzdHJpbmdhIGRpIGlucHV0IGluIHVuIGFycmF5IHBlciBvcmRpbmFybG8gaW4gbW9kbyBjcmVzY2VudGUqKQogICAgb3JkaW5hbWVudG8gKDEsbSxhcnJudW0sIHRydWUpOwogICAgc3RyaW5nYW9yZGluYXRhOj0nJzsgU2Nvbmludjo9Jyc7CiAgICBmb3IgaTo9MSB0byBtIGRvIHN0cmluZ2FvcmRpbmF0YTo9c3RyaW5nYW9yZGluYXRhK2Fycm51bVtpXTsgKCpyaXRvcm5vIGRhIGFycmF5IGEgc3RyaW5nYSBwZXIgYXBwbGljYXJlIGxlIHByb2NlZHVyZSopCiAgICBzdHJpbmdhZGFpbnZlcnRpcmU6PXN0cmluZ2FvcmRpbmF0YTsKICAgIHVzY2l0YTo9ZmFsc2U7IHc6PTE7ICAgIAogICAgd2hpbGUgKHVzY2l0YT1mYWxzZSkgIGRvIAogICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBTdHJpbmdhZGFpbnZlcnRpcmVbMV08PicwJyB0aGVuICAoKnNlIGxhIHN0cmluZ2FkYWludmVydGlyZSByYXBwcmVzZW50YSB1biBudW1lcm8gY2hlIG5vbiBpbml6aWEgY29uIHplcm8gbG8gdHJhc2Zvcm1vIGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcm8gZSBsbyBtZW1vcml6em8gbmVsbCdhcnJheSBhcnJwc3cqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbChTY29uaW52LGFycnBzd1t3XSxjb2QpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdzo9dysxOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRQZXJtdXRhdGlvbihzdHJpbmdhZGFpbnZlcnRpcmUpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdhZGFpbnZlcnRpcmU6PVNjb25pbnY7IAogICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7CiAgICBmb3IgaTo9MSB0byB3IC0yIGRvICAgICgqY29uZnJvbnRvIGEgY29wcGllIHR1dHRpIGkgbnVtZXJpIGRpIGFycnBzdyBwZXIgdHJvdmFyZSBsYSBjb3BwaWEgbGEgY3VpIGRpZmZlcmVuemEgw6ggbXVsdGlwbGEgZGkgayopCiAgICAgICAgICAgICAgICBmb3Igajo9dy0yIGRvd250byAxIGRvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYXJycHN3W2pdIG1vZCBrLWFycnBzd1tpXSBtb2QgaykgbW9kIGsgPTApIGFuZCAoKGFycnBzd1tqXSA8PiBhcnJwc3dbaV0gKSkgdGhlbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlbG4oYXJycHN3W2ldKTsgd3JpdGVsbihhcnJwc3dbal0pOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQ7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsKICAgIHdyaXRlbG4oJy0xJyk7IAoKZW5kLg==