마법의 주문
시간 제한1초메모리 제한256 MB
변수와 배열, 점프, 연산, 출력을 포함한 최대 200줄 주문 프로그램을 해석해 출력 결과를 재현합니다.
문제
마법사의 일에 끼어들지 마라. 그들은 속을 알 수 없고 쉽게 노한다.
길도르
간달프는 사우론과 싸우려고 날마다 비술을 다룬다. 룬을 잘못 늘어놓으면 아무도 뜻하지 않은 일이 벌어지므로, 간달프는 제자인 너에게 주문을 외우기 전에 그 결과를 알려 주는 장치를 만들라고 맡겼다.
주문은 한 줄에 하나씩 적힌 명령의 나열이다. 명령은 요정어로 쓰여 있고, 간달프가 아래에 뜻을 적어 두었다.
몇 가지 짚어 둔다.
- [var]는 다음 세 가지 중 하나다.
- 정수 상수. 예를 들어 6이다. 정수 상수에 값을 넣으려 하면 아무 일도 일어나지 않고 다음 명령으로 넘어간다.
- tangado로 선언한 변수. 예를 들어 shadowfax다. C나 Java의 int처럼 다룬다.
- ost로 선언한 배열의 칸. 예를 들어 moria[4]다. 첨자 자리에도 [var]가 오므로 첨자는 중첩된다.
- [string]은 큰따옴표로 감싼 문자열 상수다. 안에 큰따옴표와 줄바꿈은 들어가지 않는다.
- [lbl]은 레이블이다. 레이블 이름은 변수 이름과 같을 수 있지만 둘은 아무 관계가 없다. 레이블은 미리 선언하지 않으므로, 해석하기 전에 주문 전체를 훑어 레이블 위치를 찾아 두면 편하다.
- arth를 실행하면 짝이 되는 sad 바로 다음 명령부터 이어서 해석한다. arth가 가리키는 sad가 주문의 뒤쪽에 있어도 된다.
- sad는 변수를 바꾸지 않고 arth, pen, muindor가 뛰어올 자리만 표시한다.
- ost로 만든 배열은 모든 칸이 0으로 초기화된다.
- 변수 이름과 레이블 이름은 영문 대소문자로만 이루어진다.
- 나눗셈은 0 쪽으로 버린다. 7 / 2는 3이고 -7 / 2는 -3이다.
- 마지막 명령까지 실행하고 뒤에 명령이 없으면 awarthad와 똑같이 주문이 끝난다.
제한:
- 주문의 명령 줄은 200줄 이하다.
- 배열의 크기는 1 이상 1000 이하다.
- 주문은 명령을 100000번 이하 실행하고 끝난다.
- 주문이 다루는 모든 값은 이상 이하다.
- 선언하지 않은 변수를 읽거나, 배열 밖의 칸을 건드리거나, 0으로 나누거나, 없는 레이블로 뛰는 주문은 주어지지 않는다.
입력
주문 하나가 한 줄에 명령 하나씩 주어진다. 마지막 명령 다음 줄에는 END만 적힌 줄이 온다.
출력
주문이 출력하는 내용을 그대로 출력한다. 실행된 teithant와 canad마다 한 줄씩, 실행된 순서대로 출력한다.