로마 숫자 계산기

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

ACM이라는 마케팅 회사는 고객과 협력사에게 작은 선물로 나눠 주는 다양한 기발한 홍보 물품을 만든다. 그중 하나가 로마 숫자로 계산하는 계산기이다.

로마 숫자는 대문자를 사용해 임의의 음이 아닌 정수를 나타낼 수 있다.

기호IVXLCDM
1510501005001000

숫자는 여러 글자를 이어 붙여 만들며, 값이 큰 글자가 항상 값이 작은 글자보다 앞에 와야 한다. 예외는 "I", "X", "C" 세 글자뿐이다. 이 글자들은 더 큰 값의 글자 앞에 놓여 끝자리가 4 또는 9인 값을 만들 수 있다. 허용되는 조합은 다음이 전부이다.

조합IVIXXLXCCDCM
494090400900

모든 로마 숫자는 천의 자리를 먼저, 그다음 백의 자리, 십의 자리, 마지막으로 일의 자리를 나타내야 한다. 따라서 499는 항상 "ID"가 아니라 "CDXCIX"로 써야 한다.

실용적이지는 않지만 이 선물은 매우 멋지다고 여겨진다. 이 계산기를 위한 소프트웨어를 작성하라.

입력

입력은 여러 개의 명령으로 이루어지며, 각 명령은 한 줄에 하나씩 주어진다. 가능한 명령은 대입, "RESET", "QUIT"이다.

대입 명령은 계산기가 가진 열 개의 레지스터(0부터 9까지) 중 하나를 가리키는 한 자리 숫자로 시작한다. 레지스터 번호 뒤에는 등호("=")와 식이 이어진다. 식은 올바른 로마 숫자, 레지스터 이름(한 자리 숫자), 더하기("+")와 빼기("-") 기호로만 이루어진다. 모든 식은 올바르며 길이가 10000자를 넘지 않는다고 가정해도 된다.

"QUIT" 명령은 항상 입력의 마지막 명령이다.

출력

각 명령마다 정확히 한 줄을 출력한다.

  • 대입 명령의 경우, 레지스터 이름, 등호, 그리고 그 레지스터에 대입되는 값을 로마 숫자로 출력한다. 단, 식이 아직 대입되지 않은 레지스터를 참조하거나 결과가 음수이거나 10000보다 크면 대신 "Error"를 출력한다. 이때 어떤 레지스터의 값도 바뀌지 않는다.
  • "RESET" 명령의 경우, 이전의 모든 레지스터 대입을 무효화하고 "Ready"를 출력한다.
  • "QUIT" 명령의 경우, "Bye"를 출력하고 프로그램을 종료한다.