Program luck;
{ constraints }
const
MAXN = 200;
MAXC = 10000;
INF = 4*MAXC;
{ input data }
var
N,C,i,j,k: longint;
M10, D10 : array[1..4] of longint; { powers of 10 to extract digits by mod or div }
L : array[1..MAXN] of longint; { lucky numbers }
pfx : array[1..MAXN] of array[1..MAXN] of longint; { how overlapping numbers are }
good : array[1..MAXC] of array[1..MAXN] of longint; { good[k,i] = how short can k numbers starting from L[i] be }
mtch : array[1..MAXC] of array[1..MAXN] of longint; { mtch[k,i] = next number to obtain good[k,i] }
best : array[1..MAXC] of longint; { best[k] = best start for k numbers }
begin
{
uncomment the following lines if you want to read/write from files
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
}
readln(N, C);
for i:=1 to N do begin
read(L[i]);
good[1,i] := 4; { L[i] has 4 digits }
mtch[1,i] := -1; { nothing after L[i] }
end;
readln();
for i:=1 to N do write (good[1][i]); end.
best[1] := 1; { all equivalent for k=1 }
M10[1] := 10;
M10[2] := 100;
M10[3] := 1000;
M10[4] := 10000;
D10[1] := 1000;
D10[2] := 100;
D10[3] := 10;
D10[4] := 1;
for i:=1 to N do for j:=1 to N do begin
pfx[i,j] := 4; { no overlap }
for k:=1 to 3 do if L[i] mod M10[k] = L[j] div D10[k] then
pfx[i,j] := 4-k; { overlap found }
end;
for k:=2 to C-3 do begin
best[k] := 1;
for i:=1 to N do begin
good[k,i] := INF;
for j:=1 to N do if pfx[i,j] + good[k-1,j] < good[k,i] then begin
good[k,i] := pfx[i,j] + good[k-1,j];
mtch[k,i] := j; { use j after i }
end;
if good[k,i] < good[k,best[k]] then
best[k] := i; { use i for k numbers }
end;
if good[k,best[k]] >= C then break; { no way to be within C digits for larger k }
end;
if good[k,best[k]] > C then k := k-1;
i := best[k]; { starting number }
for j:=1 to C-good[k,best[k]] do write(0); { padding digits to reach length C }
for k:=k downto 2 do begin
{ write first digits of L[i] }
for j:=1 to pfx[i,mtch[k,i]] do
write((L[i] div D10[j]) mod 10);
i := mtch[k,i] { next number }
end;
writeln(L[i]);
end.
UHJvZ3JhbSBsdWNrOwp7IGNvbnN0cmFpbnRzIH0KY29uc3QKICAgIE1BWE4gPSAyMDA7CiAgICBNQVhDID0gMTAwMDA7CiAgICBJTkYgID0gNCpNQVhDOwoKeyBpbnB1dCBkYXRhIH0KdmFyCiAgICBOLEMsaSxqLGs6IGxvbmdpbnQ7CiAgICBNMTAsIEQxMCA6IGFycmF5WzEuLjRdIG9mIGxvbmdpbnQ7ICAgICAgICAgICAgICAgICAgICAgIHsgcG93ZXJzIG9mIDEwIHRvIGV4dHJhY3QgZGlnaXRzIGJ5IG1vZCBvciBkaXYgfQogICAgTCAgICAgICAgOiBhcnJheVsxLi5NQVhOXSBvZiBsb25naW50OyAgICAgICAgICAgICAgICAgICB7IGx1Y2t5IG51bWJlcnMgfQogICAgcGZ4ICAgICAgOiBhcnJheVsxLi5NQVhOXSBvZiBhcnJheVsxLi5NQVhOXSBvZiBsb25naW50OyB7IGhvdyBvdmVybGFwcGluZyBudW1iZXJzIGFyZSB9CiAgICBnb29kICAgICA6IGFycmF5WzEuLk1BWENdIG9mIGFycmF5WzEuLk1BWE5dIG9mIGxvbmdpbnQ7IHsgZ29vZFtrLGldID0gaG93IHNob3J0IGNhbiBrIG51bWJlcnMgc3RhcnRpbmcgZnJvbSBMW2ldIGJlIH0KICAgIG10Y2ggICAgIDogYXJyYXlbMS4uTUFYQ10gb2YgYXJyYXlbMS4uTUFYTl0gb2YgbG9uZ2ludDsgeyBtdGNoW2ssaV0gPSBuZXh0IG51bWJlciB0byBvYnRhaW4gZ29vZFtrLGldIH0KICAgIGJlc3QgICAgIDogYXJyYXlbMS4uTUFYQ10gb2YgbG9uZ2ludDsgICAgICAgICAgICAgICAgICAgeyBiZXN0W2tdICAgPSBiZXN0IHN0YXJ0IGZvciBrIG51bWJlcnMgfQoKYmVnaW4KewogICAgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZXMgaWYgeW91IHdhbnQgdG8gcmVhZC93cml0ZSBmcm9tIGZpbGVzCiAgICBhc3NpZ24oaW5wdXQsICAnaW5wdXQudHh0Jyk7ICByZXNldChpbnB1dCk7CiAgICBhc3NpZ24ob3V0cHV0LCAnb3V0cHV0LnR4dCcpOyByZXdyaXRlKG91dHB1dCk7Cn0KCiAgICByZWFkbG4oTiwgQyk7CiAgICBmb3IgaTo9MSB0byBOIGRvIGJlZ2luCiAgICAgICAgcmVhZChMW2ldKTsKICAgICAgICBnb29kWzEsaV0gOj0gNDsgIHsgTFtpXSBoYXMgNCBkaWdpdHMgfQogICAgICAgIG10Y2hbMSxpXSA6PSAtMTsgeyBub3RoaW5nIGFmdGVyIExbaV0gfQogICAgZW5kOwogICAgcmVhZGxuKCk7CiAgICBmb3IgaTo9MSB0byBOIGRvIHdyaXRlIChnb29kWzFdW2ldKTsgZW5kLgogICAgYmVzdFsxXSA6PSAxOyB7IGFsbCBlcXVpdmFsZW50IGZvciBrPTEgfQogICAgTTEwWzFdIDo9IDEwOwogICAgTTEwWzJdIDo9IDEwMDsKICAgIE0xMFszXSA6PSAxMDAwOwogICAgTTEwWzRdIDo9IDEwMDAwOwogICAgRDEwWzFdIDo9IDEwMDA7CiAgICBEMTBbMl0gOj0gMTAwOwogICAgRDEwWzNdIDo9IDEwOwogICAgRDEwWzRdIDo9IDE7CiAgICBmb3IgaTo9MSB0byBOIGRvIGZvciBqOj0xIHRvIE4gZG8gYmVnaW4KICAgICAgICBwZnhbaSxqXSA6PSA0OyB7IG5vIG92ZXJsYXAgfQogICAgICAgIGZvciBrOj0xIHRvIDMgZG8gaWYgTFtpXSBtb2QgTTEwW2tdID0gTFtqXSBkaXYgRDEwW2tdIHRoZW4KICAgICAgICAgICAgcGZ4W2ksal0gOj0gNC1rOyB7IG92ZXJsYXAgZm91bmQgfQogICAgZW5kOwogICAgZm9yIGs6PTIgdG8gQy0zIGRvIGJlZ2luCiAgICAgICAgYmVzdFtrXSA6PSAxOwogICAgICAgIGZvciBpOj0xIHRvIE4gZG8gYmVnaW4KICAgICAgICAgICAgZ29vZFtrLGldIDo9IElORjsKICAgICAgICAgICAgZm9yIGo6PTEgdG8gTiBkbyBpZiBwZnhbaSxqXSArIGdvb2Rbay0xLGpdIDwgZ29vZFtrLGldIHRoZW4gYmVnaW4KICAgICAgICAgICAgICAgIGdvb2RbayxpXSA6PSBwZnhbaSxqXSArIGdvb2Rbay0xLGpdOwogICAgICAgICAgICAgICAgbXRjaFtrLGldIDo9IGo7IHsgdXNlIGogYWZ0ZXIgaSB9CiAgICAgICAgICAgIGVuZDsKICAgICAgICAgICAgaWYgZ29vZFtrLGldIDwgZ29vZFtrLGJlc3Rba11dIHRoZW4KICAgICAgICAgICAgICAgIGJlc3Rba10gOj0gaTsgeyB1c2UgaSBmb3IgayBudW1iZXJzIH0KICAgICAgICBlbmQ7CiAgICAgICAgaWYgZ29vZFtrLGJlc3Rba11dID49IEMgdGhlbiBicmVhazsgeyBubyB3YXkgdG8gYmUgd2l0aGluIEMgZGlnaXRzIGZvciBsYXJnZXIgayB9CiAgICBlbmQ7CiAgICBpZiBnb29kW2ssYmVzdFtrXV0gPiBDIHRoZW4gayA6PSBrLTE7CiAgICBpIDo9IGJlc3Rba107IHsgc3RhcnRpbmcgbnVtYmVyIH0KICAgIGZvciBqOj0xIHRvIEMtZ29vZFtrLGJlc3Rba11dIGRvIHdyaXRlKDApOyB7IHBhZGRpbmcgZGlnaXRzIHRvIHJlYWNoIGxlbmd0aCBDIH0KICAgIGZvciBrOj1rIGRvd250byAyIGRvIGJlZ2luCiAgICAgICAgeyB3cml0ZSBmaXJzdCBkaWdpdHMgb2YgTFtpXSB9CiAgICAgICAgZm9yIGo6PTEgdG8gcGZ4W2ksbXRjaFtrLGldXSBkbwogICAgICAgICAgICB3cml0ZSgoTFtpXSBkaXYgRDEwW2pdKSBtb2QgMTApOwogICAgICAgIGkgOj0gbXRjaFtrLGldIHsgbmV4dCBudW1iZXIgfQogICAgZW5kOwogICAgd3JpdGVsbihMW2ldKTsKZW5kLg==