만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

메시지의 두 가지 모양

시간 제한1초메모리 제한1024 MB

요약
중괄호로 묶인 정수 목록을 16진수 문자열로 압축하여 출력합니다.
난이도

보통10점 중 4점

유형
문자열, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

Juku는 학생 위성 프로젝트에 참여하고 있으며, 지상에서 보내는 메시지로 위성을 제어하는 일을 맡고 있다. 메시지는 시작 기호 '{'와 끝 기호 '}'로 감싸지며, 공백으로 구분된 정수를 담고 있다. 느린 데이터 통신이 걱정된 Juku는 메시지를 더 짧은 형태로 바꾸기로 했다.

텍스트로 적힌 숫자는 1바이트, 즉 8비트를 차지한다. 그러나 숫자 하나를 16진수로 쓰면 4비트만 차지한다. 16진수 숫자 중에는 메시지를 압축하는 데 쓸 수 있는 값도 있다. (16진수에서는 숫자로 0…\ldots9와 A…\ldotsF를 쓰며, 0…\ldots9의 값은 0…90 \ldots 9이고 A…\ldotsF의 값은 10…1510 \ldots 15이다. 두 자리 16진수 XYXY의 값은 16⋅X+Y16 \cdot X + Y이다.)

Juku는 다음 규칙으로 메시지를 압축한다.

  1. 메시지의 시작 표시는 16진수 숫자 E이고, 끝 표시는 16진수 숫자 F이다.
  2. 입력 메시지의 수에 0이 3개에서 15개까지 연속으로 있으면, 그 0들을 16진수 숫자 B로 바꾸고, 그 뒤에 0의 연속 개수를 16진수 숫자 3…\ldotsF로 쓴다. 연속 개수가 15보다 크면 B를 쓰고 0을 쓴 뒤, 개수를 두 자리 16진수 10…\ldotsFF로 쓴다.
  3. 입력 메시지의 각 수 NN은 16진수 숫자 A로 시작하도록 쓴다. NN의 자릿수가 15 이하이면 A를 쓰고, 이어서 자릿수를 16진수 숫자 1…\ldotsF로 쓴다. NN의 자릿수가 15보다 크면 A를 쓰고 0을 쓴 뒤, 자릿수를 두 자리 16진수 10…\ldotsFF로 쓴다. 두 경우 모두 자릿수 뒤에 NN 자체를 쓴다. NN에 0이 2개보다 많이 연속으로 있으면, 먼저 규칙 2로 압축하고, 자릿수로는 원래 수가 아니라 압축 결과의 자릿수를 사용한다.
  4. 압축된 메시지의 16진수 숫자 개수가 홀수이면, 맨 끝(F 뒤)에 D를 붙인다.

입력 파일에서 메시지를 읽고, 압축 결과를 텍스트 형태로 출력 파일에 쓰는 프로그램을 작성하라.

입력

입력 파일에는 전송할 메시지가 한 줄에 정확히 하나 있다. 메시지에는 최대 100개의 양의 정수가 있으며, 모두 1025610^{256}보다 작다.

출력

출력 파일의 한 줄에 압축된 메시지를 텍스트 형태로 출력한다. 각 16진수 숫자는 한 글자로 쓴다. 사람이 읽기 쉽도록 이렇게 쓰는 것이다. 16진수 숫자들을 실제 바이트로 묶으면 사람이 읽기 어렵다.

예제1

  1. 예제 1

    입력
    { 10 555 2000 79 }
    
    예상 출력
    EA210A3555A32B3A279F