program scopa;
type carta = record
numero:longint;
seme:char
end;
coppie = record
somma:longint;
indice1:longint;
indice2:longint;
end;
var
line: ansistring;
i,j, h,w,z, tot, som, number, ricordaidscopa,ricordaid2, idsetteincoppia,ricordaidcoppiasette,idmanosette, idtablesette, ricordaidternasette, ricordasememano, ricordasemetable, ricordanumero, ricordaterna, ricordacoppia, ricordasingolo: longint;
suit: char;
mano, table: array[1..4] of carta;
prendodue : array[1..6] of coppie;
settebinmano, settebintable, setteinmano,setteintable,setteincoppia, setteinterna,coppiasette, fattoscopa,ternasette, trovatosette,trovatosette1, trovatosette2, laterna, coppia, singolo: boolean;
terna:array [1..4] of longint;
procedure readcard(var s: ansistring; var number: longint; var suit: char);
begin
if (s[1] = '1') and (s[2] = '0') then
begin
number := 10;
suit := s[3];
s := copy(s, 5, length(s));
end else begin
number := ord(s[1]) - ord('0');
if ord(s[2])<>32 then
begin
suit := s[2];
s := copy(s, 4, length(s));
end
else
begin
suit := s[2+1];
s := copy(s, 4+1, length(s));
end;
end;
end;
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);
}
settebinmano:=false; settebintable:=false; ternasette:=false;setteinmano:=false; coppiasette:=false; setteintable:=false;fattoscopa:=false; trovatosette1:=false; trovatosette2:=false; setteinterna:=false; setteincoppia:=false;
readln(line);
for i:=1 to 3 do
begin
{ card in hand }
readcard(line, number, suit);
writeln (line);
mano[i].numero:=number;
mano[i].seme:=suit;
if (number=7) and (suit='G') then settebinmano:=true;
{ use number and suit }
end;
readln(line);
tot:=0;
for i:=1 to 4 do
begin
{ card on table }
readcard(line, number, suit);
writeln(line);
table[i].numero:=number;
table[i].seme:=suit;
tot:=tot+number;
if (number=7) and (suit='G') then settebintable:=true;
{ use number and suit }
end;
for i:=1 to 3 do if mano[i].numero=tot then begin fattoscopa:=true; ricordaidscopa:=i; end;
h:=1; for i:=1 to 4 do begin terna[h]:=tot-table[i].numero; h:=h+1; end;
for i:=1 to 4 do if terna[i]=7 then begin ternasette:=true; ricordaidternasette:=i; end;
for i:=1 to 3 do if mano[i].numero=7 then begin setteinmano:=true; idmanosette:=i; end;
for i:=1 to 4 do if table[i].numero=7 then begin setteintable:=true; idtablesette:=i; end;
h:=0;
for i:= 1 to 3 do
begin
som:=0;
for j:=i+1 to 4 do
begin
h:=h+1;
som:=table[i].numero+table[j].numero;
if table[j].numero= 7 then begin setteincoppia:=true; idsetteincoppia:=h; end;
prendodue[h].somma:=som;
prendodue[h].indice1:=i;
prendodue[h].indice2:=j;
end;
end;
for i:=1 to 6 do if prendodue[i].somma=7 then begin coppiasette:=true; ricordaidcoppiasette:=i; end;
if settebinmano=true then
begin if setteintable=true then writeln ('7','G',' ','7',table[idtablesette].seme)
else
begin
if coppiasette=true then writeln (mano[idmanosette].numero, mano[idmanosette].seme,' ',table[prendodue[ricordaidcoppiasette].indice1].numero, table[prendodue[ricordaidcoppiasette].indice1].seme,' ',table[prendodue[ricordaidcoppiasette].indice2].numero, table[prendodue[ricordaidcoppiasette].indice2].seme)
else
if ternasette=true then begin write (mano[idmanosette].numero, mano[idmanosette].seme,' ');
for z:=1 to 4 do if z<>ricordaidternasette then write (table[z].numero, table[z].seme,' '); writeln; end;
end
end
else if settebintable=true then
begin for i:=1 to 3 do if mano[i].numero=7 then writeln ('7','G',' ','7',mano[i].seme); end
else if fattoscopa=true then begin write(mano[ricordaidscopa].numero,mano[ricordaidscopa].seme,' ');
for j:=1 to 4 do write(table[j].numero,table[j].seme,' '); writeln;end
else if (setteinmano=true) then begin if setteintable=true then writeln (mano[idmanosette].numero, mano[idmanosette].seme,' ',table[idtablesette].numero, table[idtablesette].seme)
else
begin
if coppiasette=true then writeln (mano[idmanosette].numero, mano[idmanosette].seme,' ',table[prendodue[ricordaidcoppiasette].indice1].numero, table[prendodue[ricordaidcoppiasette].indice1].seme,' ',table[prendodue[ricordaidcoppiasette].indice2].numero, table[prendodue[ricordaidcoppiasette].indice2].seme)
else
if ternasette=true then begin write (mano[idmanosette].numero, mano[idmanosette].seme,' ');
for z:=1 to 4 do if z<>ricordaidternasette then write (table[z].numero, table[z].seme,' '); writeln; end;
end;
end
else if setteintable=true then begin if setteincoppia=true then for i:=1 to 3 do if mano[i].numero=prendodue[idsetteincoppia].somma then writeln(mano[i].numero, mano[i].seme,' ',table[prendodue[idsetteincoppia].indice1].numero, table[prendodue[idsetteincoppia].indice1].seme,' ',table[prendodue[idsetteincoppia].indice2].numero, table[prendodue[idsetteincoppia].indice2].seme); end
else
begin
laterna:=false; coppia:=false; singolo:=false;
for i:=1 to 3 do
for j:=1 to 4 do if mano[i].numero=terna[j] then begin ricordanumero:=i; ricordaterna:=j; laterna:=true; end;
if laterna=false then for i:=1 to 3 do
for j:=1 to 6 do if mano[i].numero=prendodue[j].somma then begin ricordanumero:=i; ricordacoppia:=j;coppia:=true; end;
if ((laterna=false) and (coppia=false)) then for i:=1 to 3 do
for j:=1 to 4 do if mano[i].numero=table[j].numero then begin ricordanumero:=i; ricordasingolo:=j;singolo:=true; end;
if laterna=true then begin write (mano[ricordanumero].numero,mano[ricordanumero].seme,' ');
for z:=1 to 4 do if z<>ricordaterna then write (table[z].numero, table[z].seme,' '); writeln;
end
else
if coppia=true then begin write (mano[ricordanumero].numero,mano[ricordanumero].seme,' ');
write(table[prendodue[ricordacoppia].indice1].numero, table[prendodue[ricordacoppia].indice1].seme,' ',table[prendodue[ricordacoppia].indice2].numero, table[prendodue[ricordacoppia].indice2].seme); writeln;
end
else if singolo=true then writeln (mano[ricordanumero].numero,mano[ricordanumero].seme,' ',table[ricordasingolo].numero,table[ricordasingolo].seme );
end;
end.
cHJvZ3JhbSBzY29wYTsKdHlwZSBjYXJ0YSA9IHJlY29yZAogICAgICAgICAgICAgICAgICAgbnVtZXJvOmxvbmdpbnQ7CiAgICAgICAgICAgICAgICAgICBzZW1lOmNoYXIKICAgICAgICAgICAgICAgIGVuZDsKICAgICBjb3BwaWUgPSByZWNvcmQKICAgICAgICAgICAgICAgICAgIHNvbW1hOmxvbmdpbnQ7CiAgICAgICAgICAgICAgICAgICBpbmRpY2UxOmxvbmdpbnQ7CiAgICAgICAgICAgICAgICAgICBpbmRpY2UyOmxvbmdpbnQ7CiAgICAgICAgICAgICAgICBlbmQ7ICAgICAgICAgICAgCnZhcgogICAgbGluZTogYW5zaXN0cmluZzsKICAgIGksaiwgaCx3LHosIHRvdCwgc29tLCBudW1iZXIsIHJpY29yZGFpZHNjb3BhLHJpY29yZGFpZDIsIGlkc2V0dGVpbmNvcHBpYSxyaWNvcmRhaWRjb3BwaWFzZXR0ZSxpZG1hbm9zZXR0ZSwgaWR0YWJsZXNldHRlLCByaWNvcmRhaWR0ZXJuYXNldHRlLCAgcmljb3JkYXNlbWVtYW5vLCByaWNvcmRhc2VtZXRhYmxlLCByaWNvcmRhbnVtZXJvLCByaWNvcmRhdGVybmEsIHJpY29yZGFjb3BwaWEsIHJpY29yZGFzaW5nb2xvOiBsb25naW50OwogICAgc3VpdDogY2hhcjsKICAgIG1hbm8sIHRhYmxlOiBhcnJheVsxLi40XSBvZiBjYXJ0YTsKICAgIHByZW5kb2R1ZSA6IGFycmF5WzEuLjZdIG9mIGNvcHBpZTsKICAgIHNldHRlYmlubWFubywgc2V0dGViaW50YWJsZSwgc2V0dGVpbm1hbm8sc2V0dGVpbnRhYmxlLHNldHRlaW5jb3BwaWEsIHNldHRlaW50ZXJuYSxjb3BwaWFzZXR0ZSwgZmF0dG9zY29wYSx0ZXJuYXNldHRlLCB0cm92YXRvc2V0dGUsdHJvdmF0b3NldHRlMSwgdHJvdmF0b3NldHRlMiwgbGF0ZXJuYSwgY29wcGlhLCBzaW5nb2xvOiBib29sZWFuOwogICAgdGVybmE6YXJyYXkgWzEuLjRdIG9mIGxvbmdpbnQ7CiAgICAKcHJvY2VkdXJlIHJlYWRjYXJkKHZhciBzOiBhbnNpc3RyaW5nOyB2YXIgbnVtYmVyOiBsb25naW50OyB2YXIgc3VpdDogY2hhcik7CmJlZ2luCiAgICBpZiAoc1sxXSA9ICcxJykgYW5kIChzWzJdID0gJzAnKSB0aGVuCiAgICBiZWdpbgogICAgICAgIG51bWJlciA6PSAxMDsKICAgICAgICBzdWl0IDo9IHNbM107CiAgICAgICAgcyA6PSBjb3B5KHMsIDUsIGxlbmd0aChzKSk7CiAgICBlbmQgZWxzZSBiZWdpbgogICAgICAgIG51bWJlciA6PSBvcmQoc1sxXSkgLSBvcmQoJzAnKTsKICAgICAgICBpZiBvcmQoc1syXSk8PjMyIHRoZW4gCiAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXQgOj0gc1syXTsKICAgICAgICAgICAgICAgICAgICAgICAgICBzIDo9IGNvcHkocywgNCwgbGVuZ3RoKHMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAgCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXQgOj0gc1syKzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA6PSBjb3B5KHMsIDQrMSwgbGVuZ3RoKHMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ7ICAKICAgIGVuZDsKZW5kOwoKCgpiZWdpbgp7CiAgICB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBpZiB5b3Ugd2FudCB0byByZWFkL3dyaXRlIGZyb20gZmlsZXMKICAgIGFzc2lnbihpbnB1dCwgICdpbnB1dC50eHQnKTsgIHJlc2V0KGlucHV0KTsKICAgIGFzc2lnbihvdXRwdXQsICdvdXRwdXQudHh0Jyk7IHJld3JpdGUob3V0cHV0KTsKfQogICAgc2V0dGViaW5tYW5vOj1mYWxzZTsgc2V0dGViaW50YWJsZTo9ZmFsc2U7IHRlcm5hc2V0dGU6PWZhbHNlO3NldHRlaW5tYW5vOj1mYWxzZTsgY29wcGlhc2V0dGU6PWZhbHNlOyBzZXR0ZWludGFibGU6PWZhbHNlO2ZhdHRvc2NvcGE6PWZhbHNlOyB0cm92YXRvc2V0dGUxOj1mYWxzZTsgdHJvdmF0b3NldHRlMjo9ZmFsc2U7IHNldHRlaW50ZXJuYTo9ZmFsc2U7IHNldHRlaW5jb3BwaWE6PWZhbHNlOwogICAgcmVhZGxuKGxpbmUpOwogICAgZm9yIGk6PTEgdG8gMyBkbwogICAgYmVnaW4KICAgICAgICB7IGNhcmQgaW4gaGFuZCB9CiAgICAgICAgcmVhZGNhcmQobGluZSwgbnVtYmVyLCBzdWl0KTsKICAgICAgICB3cml0ZWxuIChsaW5lKTsKICAgICAgICBtYW5vW2ldLm51bWVybzo9bnVtYmVyOwogICAgICAgIG1hbm9baV0uc2VtZTo9c3VpdDsKICAgICAgICBpZiAobnVtYmVyPTcpIGFuZCAoc3VpdD0nRycpIHRoZW4gc2V0dGViaW5tYW5vOj10cnVlOwogICAgICAgIHsgdXNlIG51bWJlciBhbmQgc3VpdCB9CiAgICBlbmQ7CgogICAgcmVhZGxuKGxpbmUpOwogICAgdG90Oj0wOyAKICAgIGZvciBpOj0xIHRvIDQgZG8KICAgIGJlZ2luCiAgICAgICAgeyBjYXJkIG9uIHRhYmxlIH0KICAgICAgICByZWFkY2FyZChsaW5lLCBudW1iZXIsIHN1aXQpOwogICAgICAgIHdyaXRlbG4obGluZSk7CiAgICAgICAgdGFibGVbaV0ubnVtZXJvOj1udW1iZXI7CiAgICAgICAgdGFibGVbaV0uc2VtZTo9c3VpdDsKICAgICAgICB0b3Q6PXRvdCtudW1iZXI7CiAgICAgICAgaWYgKG51bWJlcj03KSBhbmQgKHN1aXQ9J0cnKSB0aGVuIHNldHRlYmludGFibGU6PXRydWU7CiAgICAgICAgeyB1c2UgbnVtYmVyIGFuZCBzdWl0IH0KICAgIGVuZDsKICAgIGZvciBpOj0xIHRvIDMgZG8gaWYgbWFub1tpXS5udW1lcm89dG90IHRoZW4gYmVnaW4gZmF0dG9zY29wYTo9dHJ1ZTsgcmljb3JkYWlkc2NvcGE6PWk7IGVuZDsKICAgIGg6PTE7IGZvciBpOj0xIHRvIDQgZG8gYmVnaW4gdGVybmFbaF06PXRvdC10YWJsZVtpXS5udW1lcm87IGg6PWgrMTsgZW5kOwogICAgZm9yIGk6PTEgdG8gNCBkbyBpZiB0ZXJuYVtpXT03IHRoZW4gYmVnaW4gdGVybmFzZXR0ZTo9dHJ1ZTsgcmljb3JkYWlkdGVybmFzZXR0ZTo9aTsgZW5kOwogICAgZm9yIGk6PTEgdG8gMyBkbyBpZiBtYW5vW2ldLm51bWVybz03IHRoZW4gYmVnaW4gc2V0dGVpbm1hbm86PXRydWU7IGlkbWFub3NldHRlOj1pOyBlbmQ7CiAgICBmb3IgaTo9MSB0byA0IGRvIGlmIHRhYmxlW2ldLm51bWVybz03IHRoZW4gYmVnaW4gc2V0dGVpbnRhYmxlOj10cnVlOyBpZHRhYmxlc2V0dGU6PWk7IGVuZDsKICAgIGg6PTA7CiAgICBmb3IgaTo9IDEgdG8gMyBkbwogICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgc29tOj0wOwogICAgICAgICAgICAgICAgICBmb3Igajo9aSsxIHRvIDQgZG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6PWgrMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29tOj10YWJsZVtpXS5udW1lcm8rdGFibGVbal0ubnVtZXJvOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0YWJsZVtqXS5udW1lcm89IDcgdGhlbiBiZWdpbiBzZXR0ZWluY29wcGlhOj10cnVlOyBpZHNldHRlaW5jb3BwaWE6PWg7IGVuZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlbmRvZHVlW2hdLnNvbW1hOj1zb207CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZW5kb2R1ZVtoXS5pbmRpY2UxOj1pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVuZG9kdWVbaF0uaW5kaWNlMjo9ajsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsKICAgICAgICAgICAgICAgIGVuZDsgCiAgICBmb3IgaTo9MSB0byA2IGRvIGlmIHByZW5kb2R1ZVtpXS5zb21tYT03IHRoZW4gIGJlZ2luIGNvcHBpYXNldHRlOj10cnVlOyByaWNvcmRhaWRjb3BwaWFzZXR0ZTo9aTsgZW5kOyAgICAgICAgICAgCiAgICBpZiBzZXR0ZWJpbm1hbm89dHJ1ZSB0aGVuIAogICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luICAgIGlmIHNldHRlaW50YWJsZT10cnVlIHRoZW4gIHdyaXRlbG4gKCc3JywnRycsJyAnLCc3Jyx0YWJsZVtpZHRhYmxlc2V0dGVdLnNlbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvcHBpYXNldHRlPXRydWUgdGhlbiB3cml0ZWxuIChtYW5vW2lkbWFub3NldHRlXS5udW1lcm8sIG1hbm9baWRtYW5vc2V0dGVdLnNlbWUsJyAnLHRhYmxlW3ByZW5kb2R1ZVtyaWNvcmRhaWRjb3BwaWFzZXR0ZV0uaW5kaWNlMV0ubnVtZXJvLCB0YWJsZVtwcmVuZG9kdWVbcmljb3JkYWlkY29wcGlhc2V0dGVdLmluZGljZTFdLnNlbWUsJyAnLHRhYmxlW3ByZW5kb2R1ZVtyaWNvcmRhaWRjb3BwaWFzZXR0ZV0uaW5kaWNlMl0ubnVtZXJvLCB0YWJsZVtwcmVuZG9kdWVbcmljb3JkYWlkY29wcGlhc2V0dGVdLmluZGljZTJdLnNlbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVybmFzZXR0ZT10cnVlIHRoZW4gIGJlZ2luIHdyaXRlIChtYW5vW2lkbWFub3NldHRlXS5udW1lcm8sIG1hbm9baWRtYW5vc2V0dGVdLnNlbWUsJyAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igejo9MSB0byA0ICBkbyBpZiB6PD5yaWNvcmRhaWR0ZXJuYXNldHRlIHRoZW4gd3JpdGUgKHRhYmxlW3pdLm51bWVybywgdGFibGVbel0uc2VtZSwnICcpOyB3cml0ZWxuOyBlbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCAKICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgICAgCiAgICBlbHNlIGlmIHNldHRlYmludGFibGU9dHJ1ZSB0aGVuIAogICAgICAgICAgIGJlZ2luIGZvciBpOj0xIHRvIDMgZG8gaWYgbWFub1tpXS5udW1lcm89NyB0aGVuIHdyaXRlbG4gKCc3JywnRycsJyAnLCc3JyxtYW5vW2ldLnNlbWUpOyBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgZWxzZSBpZiBmYXR0b3Njb3BhPXRydWUgdGhlbiAgYmVnaW4gd3JpdGUobWFub1tyaWNvcmRhaWRzY29wYV0ubnVtZXJvLG1hbm9bcmljb3JkYWlkc2NvcGFdLnNlbWUsJyAnKTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGo6PTEgdG8gNCBkbyB3cml0ZSh0YWJsZVtqXS5udW1lcm8sdGFibGVbal0uc2VtZSwnICcpOyB3cml0ZWxuO2VuZAogICAgIGVsc2UgaWYgKHNldHRlaW5tYW5vPXRydWUpICB0aGVuIGJlZ2luIGlmIHNldHRlaW50YWJsZT10cnVlIHRoZW4gd3JpdGVsbiAgKG1hbm9baWRtYW5vc2V0dGVdLm51bWVybywgbWFub1tpZG1hbm9zZXR0ZV0uc2VtZSwnICcsdGFibGVbaWR0YWJsZXNldHRlXS5udW1lcm8sIHRhYmxlW2lkdGFibGVzZXR0ZV0uc2VtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29wcGlhc2V0dGU9dHJ1ZSB0aGVuIHdyaXRlbG4gKG1hbm9baWRtYW5vc2V0dGVdLm51bWVybywgbWFub1tpZG1hbm9zZXR0ZV0uc2VtZSwnICcsdGFibGVbcHJlbmRvZHVlW3JpY29yZGFpZGNvcHBpYXNldHRlXS5pbmRpY2UxXS5udW1lcm8sIHRhYmxlW3ByZW5kb2R1ZVtyaWNvcmRhaWRjb3BwaWFzZXR0ZV0uaW5kaWNlMV0uc2VtZSwnICcsdGFibGVbcHJlbmRvZHVlW3JpY29yZGFpZGNvcHBpYXNldHRlXS5pbmRpY2UyXS5udW1lcm8sIHRhYmxlW3ByZW5kb2R1ZVtyaWNvcmRhaWRjb3BwaWFzZXR0ZV0uaW5kaWNlMl0uc2VtZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVybmFzZXR0ZT10cnVlIHRoZW4gIGJlZ2luIHdyaXRlIChtYW5vW2lkbWFub3NldHRlXS5udW1lcm8sIG1hbm9baWRtYW5vc2V0dGVdLnNlbWUsJyAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igejo9MSB0byA0ICBkbyBpZiB6PD5yaWNvcmRhaWR0ZXJuYXNldHRlIHRoZW4gd3JpdGUgKHRhYmxlW3pdLm51bWVybywgdGFibGVbel0uc2VtZSwnICcpOyB3cml0ZWxuOyBlbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDsgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgIGVsc2UgaWYgc2V0dGVpbnRhYmxlPXRydWUgdGhlbiBiZWdpbiBpZiBzZXR0ZWluY29wcGlhPXRydWUgdGhlbiBmb3IgaTo9MSB0byAzIGRvIGlmIG1hbm9baV0ubnVtZXJvPXByZW5kb2R1ZVtpZHNldHRlaW5jb3BwaWFdLnNvbW1hIHRoZW4gd3JpdGVsbihtYW5vW2ldLm51bWVybywgbWFub1tpXS5zZW1lLCcgJyx0YWJsZVtwcmVuZG9kdWVbaWRzZXR0ZWluY29wcGlhXS5pbmRpY2UxXS5udW1lcm8sIHRhYmxlW3ByZW5kb2R1ZVtpZHNldHRlaW5jb3BwaWFdLmluZGljZTFdLnNlbWUsJyAnLHRhYmxlW3ByZW5kb2R1ZVtpZHNldHRlaW5jb3BwaWFdLmluZGljZTJdLm51bWVybywgdGFibGVbcHJlbmRvZHVlW2lkc2V0dGVpbmNvcHBpYV0uaW5kaWNlMl0uc2VtZSk7IGVuZCAgICAgICAgICAgICAgICAgICAgICAKICAgICBlbHNlIAogICAgICAgIGJlZ2luIAogICAgICAgICAgIGxhdGVybmE6PWZhbHNlOyBjb3BwaWE6PWZhbHNlOyBzaW5nb2xvOj1mYWxzZTsKICAgICAgICAgICBmb3IgaTo9MSB0byAzIGRvCiAgICAgICAgICAgICAgICAgICAgIGZvciBqOj0xIHRvIDQgZG8gaWYgbWFub1tpXS5udW1lcm89dGVybmFbal0gdGhlbiBiZWdpbiByaWNvcmRhbnVtZXJvOj1pOyByaWNvcmRhdGVybmE6PWo7IGxhdGVybmE6PXRydWU7IGVuZDsKICAgICAgICAgICBpZiBsYXRlcm5hPWZhbHNlIHRoZW4gZm9yIGk6PTEgdG8gMyBkbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGo6PTEgdG8gNiBkbyBpZiBtYW5vW2ldLm51bWVybz1wcmVuZG9kdWVbal0uc29tbWEgdGhlbiBiZWdpbiByaWNvcmRhbnVtZXJvOj1pOyByaWNvcmRhY29wcGlhOj1qO2NvcHBpYTo9dHJ1ZTsgZW5kOyAgICAgICAgICAKICAgICAgICAgICBpZiAoKGxhdGVybmE9ZmFsc2UpIGFuZCAoY29wcGlhPWZhbHNlKSkgdGhlbiBmb3IgaTo9MSB0byAzIGRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igajo9MSB0byA0IGRvIGlmIG1hbm9baV0ubnVtZXJvPXRhYmxlW2pdLm51bWVybyB0aGVuIGJlZ2luIHJpY29yZGFudW1lcm86PWk7IHJpY29yZGFzaW5nb2xvOj1qO3NpbmdvbG86PXRydWU7IGVuZDsgCiAgICAgICAgICAgaWYgbGF0ZXJuYT10cnVlIHRoZW4gYmVnaW4gIHdyaXRlIChtYW5vW3JpY29yZGFudW1lcm9dLm51bWVybyxtYW5vW3JpY29yZGFudW1lcm9dLnNlbWUsJyAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igejo9MSB0byA0ICBkbyBpZiB6PD5yaWNvcmRhdGVybmEgdGhlbiB3cml0ZSAodGFibGVbel0ubnVtZXJvLCB0YWJsZVt6XS5zZW1lLCcgJyk7IHdyaXRlbG47IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29wcGlhPXRydWUgdGhlbiBiZWdpbiB3cml0ZSAobWFub1tyaWNvcmRhbnVtZXJvXS5udW1lcm8sbWFub1tyaWNvcmRhbnVtZXJvXS5zZW1lLCcgJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUodGFibGVbcHJlbmRvZHVlW3JpY29yZGFjb3BwaWFdLmluZGljZTFdLm51bWVybywgdGFibGVbcHJlbmRvZHVlW3JpY29yZGFjb3BwaWFdLmluZGljZTFdLnNlbWUsJyAnLHRhYmxlW3ByZW5kb2R1ZVtyaWNvcmRhY29wcGlhXS5pbmRpY2UyXS5udW1lcm8sIHRhYmxlW3ByZW5kb2R1ZVtyaWNvcmRhY29wcGlhXS5pbmRpY2UyXS5zZW1lKTsgd3JpdGVsbjsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiBzaW5nb2xvPXRydWUgdGhlbiB3cml0ZWxuIChtYW5vW3JpY29yZGFudW1lcm9dLm51bWVybyxtYW5vW3JpY29yZGFudW1lcm9dLnNlbWUsJyAnLHRhYmxlW3JpY29yZGFzaW5nb2xvXS5udW1lcm8sdGFibGVbcmljb3JkYXNpbmdvbG9dLnNlbWUgKTsKICAgICAgICBlbmQ7ICAKICAgICAgICAKZW5kLgo=