인터프리터

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

문제

어떤 소형 컴퓨터에는 10개의 레지스터와 1000개의 워드로 이루어진 RAM이 있다. 각 레지스터와 각 RAM 워드는 0 이상 999 이하의 세 자리 정수를 담는다. 명령어는 세 자리 정수로 인코딩되어 RAM에 저장된다. 모든 레지스터는 000으로 시작하며, RAM의 초기 내용은 표준 입력으로 주어진다. 실행은 RAM 주소 0에 있는 명령어부터 시작한다. 모든 연산 결과는 1000으로 나눈 나머지로 축약된다.

명령어 인코딩은 다음과 같다.

  • 100 — 정지(halt)한다.
  • 2dn — 레지스터 d를 n으로 설정한다.
  • 3dn — 레지스터 d에 n을 더한다.
  • 4dn — 레지스터 d에 n을 곱한다.
  • 5ds — 레지스터 d를 레지스터 s의 값으로 설정한다.
  • 6ds — 레지스터 s의 값을 레지스터 d에 더한다.
  • 7ds — 레지스터 d에 레지스터 s의 값을 곱한다.
  • 8da — 레지스터 a에 들어 있는 주소의 RAM 워드 값을 레지스터 d에 저장한다.
  • 9sa — 레지스터 s의 값을 레지스터 a에 들어 있는 주소의 RAM 워드에 저장한다.
  • 0ds — 레지스터 s가 0이 아니면 레지스터 d에 들어 있는 주소로 분기한다. 0이면 다음 명령어를 계속 실행한다.

여기서 d, s, a는 레지스터를 가리키는 한 자리 숫자(0-9)이고, n은 한 자리 숫자(0-9)이다.

입력

입력은 최대 1000개의 세 자리 부호 없는 정수로 이루어지며, 각 줄에 하나씩 주소 0부터 시작하는 연속된 RAM 워드의 내용을 나타낸다. 목록에 없는 RAM 워드는 000으로 초기화된다.

출력

정수 하나를 출력한다. 정지 명령어를 포함하여 실행된 명령어의 총 개수이다. 프로그램은 반드시 정지하며, 최대 100000개의 명령어 안에 정지한다.