Sõnumi kaks kuju | 프로그래밍의 벗 PivotOJ
PivotOJ

Sõnumi kaks kuju

시간 제한: 1000ms메모리 제한: 1024MB출처: EIO 2019-20 prelimBOJ 29919

문제

Juku osaleb õpilassatelliidi projektis ja tema hoole alla on antud satelliidi juhtimine maa pealt saadetud sõnumitega. Sõnumid koosnevad sõnumi alguse ja lõpu märgist (vastavalt '{' ja '}') ja tühikutega eraldatud täisarvudest. Juku muretseb aeglase andmeside pärast ja otsustab, et sõnumitele tuleb anda lühem kuju.

Ta teab, et tekstikujul olevaid numbreid esitatakse ühe baidi ehk 8 bitiga. Aga kui esitada üks number kuueteistkümnendsüsteemis, siis võtab see ruumi ainult 4 bitti. Lisaks on 16-numbrite hulgas veel väärtuseid, mida saab sõnumi pakkimiseks ära kasutada. (Meeldetuletuseks: 16-süsteemis kasutatakse numbritena 0\ldots9 ja A\ldotsF, kus 0\ldots9 väärtused on 090 \ldots 9 ja A\ldotsF väärtused 101510 \ldots 15. Kahekohalise 16-arvu XYXY väärtus on 16X+Y16 \cdot X + Y.)

Ta otsustab pakkida sõnumeid järgmiste reeglite järgi:

  1. Sõnumi alguse tähiseks on 16-number E ja lõpu tähiseks 16-number F.
  2. Kui sisendsõnumis olevas arvus on järjest 3 kuni 15 nulli, kirjutatakse väljundsõnumisse nende asemele 16-number B ja selle järele nullide jada pikkus 16-arvuna 3\ldotsF. Kui nullide jada pikkus on suurem kui 15, siis kirjutatakse numbri B järele number 0 ja selle järele jada pikkus 16-arvuna 10\ldotsFF.
  3. Iga sisendsõnumis olev arv NN tuleb väljundsõnumisse kirjutada nii, et see algab 16-numbriga A. Kui arvu NN pikkus on kuni 15, kirjutatakse see A järele 16-arvuna 1\ldotsF. Kui arvu NN pikkus on suurem kui 15, siis kirjutatakse numbri A järele number 0 ja selle järele NN pikkus 16-arvuna 10\ldotsFF. Mõlemal juhul kirjutatakse pikkuse järele arv NN ise. Kui arv NN sisaldab järjest rohkem kui kaks nulli, siis tuleb need enne pakkida eelmises punktis kirjeldatud reegli järgi ja arvu NN pikkuseks ei arvestata mitte algse arvu, vaid pakkimise tulemuse pikkust.
  4. Kui pakitud sõnumis on paaritu arv 16-numbreid, siis tuleb kõige lõppu (F järele) lisada D.

Koosta Jukule sõnumite pakkimiseks programm, mis loeb sisendfailist saadetava sõnumi ja kirjutab väljundfaili selle pakkimise tulemuse tekstilisel kujul.

입력

Tekstifailis on täpselt üks rida, millel on üks edastatav sõnum. Sõnumis on kuni 100 positiivset arvu, mis on kõik väiksemad kui 1025610^{256}.

출력

Tekstifaili ainsale reale väljastada pakitud sõnum tekstilisel kujul nii, et iga 16-number on esitatud ühe märgina. Seda tuleb teha vastuse loetavuse huvides, sest kui nendest 16-arvudest panna kokku päris baidid, siis on tulemus inimesele raske lugeda.

예제

예제 1

입력
{ 10 555 2000 79 }
출력
EA210A3555A32B3A279F
코드를 제출하려면 로그인하세요.