한문 훈독 순서
시간 제한8초메모리 제한512 MB
되돌림 표시(Re 표시와 번호가 붙은 점프 표시)가 달린 글자들에 대해 읽기 규칙을 모의 실험하여 글자를 읽는 순서를 출력합니다.
문제
중학생 타로가 오늘 숙제로 한문을 읽는다.
일본어는 한문과 거의 같은 한자를 쓰지만 어순이 조금 다르다. 그래서 한문을 일본어에 가까운 순서로 읽으려고 반환 기호라는 표기를 만들었다.
반환 기호는 크게 두 가지다. 하나는 Re 기호이고 다른 하나는 도약 기호다. 도약 기호에도 일이삼 기호, 상중하 기호처럼 여러 종류가 있다. 기호는 글자에 붙어서 각 글자를 읽는 순서를 나타낸다. 그림 1은 반환 기호를 붙인 한문이다. 큰 한자의 왼쪽 아래에 적은 작은 글자가 반환 기호다.

그림 1: 반환 기호를 붙인 한문
타로는 도약 기호를 일반화해서, 반환 기호가 붙은 한문을 읽는 규칙을 아래와 같이 정리했다. 타로의 규칙에 따라 한문을 해석하고 각 글자를 읽는 순서를 출력하는 프로그램을 작성하라.
한 단계에서 규칙이 두 개 이상 적용되면 아래 목록에서 뒤에 있는 규칙을 먼저 적용하고, 앞의 규칙을 그다음에 적용한다.
- 글자는 기본적으로 위에서 아래로 읽는다. 첫 번째 글자를 가장 먼저 읽거나 건너뛰고, 번째 글자를 읽거나 건너뛴 다음에는 번째 글자를 읽는다.
- 도약 기호에는 소문자 문자열로 적는 종류와 양의 정수로 적는 번호가 있다. 번호가 2 이상인 도약 기호가 붙은 글자는 건너뛰어야 한다.
- 종류가 이고 번호가 인 도약 기호가 붙은 번째 글자를 읽었을 때, 보다 앞에 있는 글자 중 종류가 이고 번호가 인 도약 기호가 붙은, 아직 읽지 않은 글자 이 있으면 다음에 을 읽어야 한다. 그런 글자 이 없으면 번째 글자를 읽는다. 는 종류가 이고 번호가 1인 도약 기호가 붙은 글자 가운데 가장 최근에 읽은 글자의 위치다.
- Re 기호가 붙은 글자는 건너뛰어야 한다.
- 번째 글자를 읽었고 번째 글자에 Re 기호가 붙어 있으면 다음에 번째 글자를 읽어야 한다.
- 같은 글자를 두 번 이상 읽을 수 없다. 한 번 읽은 글자는 이후 단계에서 건너뛴다.
- 다음에 읽을 글자가 없으면 읽기를 끝낸다.
첫 번째 예제의 첫 데이터셋을 보자. 여섯 글자의 반환 기호가 차례로 onetwo2, -, onetwo1, onetwo2, -, onetwo1이다. 규칙 1에 따라 첫 글자부터 읽기 시작하지만, 첫 글자에는 도약 기호 onetwo2가 붙어 있으므로 규칙 2에 따라 건너뛴다. 그래서 반환 기호가 없는 두 번째 글자를 가장 먼저 읽는다.
다음으로 세 번째 글자를 읽는다. 세 번째 글자에는 도약 기호 onetwo1이 붙어 있으므로, 규칙 3에 따라 더 앞에 있으면서 도약 기호 onetwo2가 붙은 글자를 다음에 읽는다. 첫 번째 글자가 바로 그런 글자여서 세 번째로 읽는다. 같은 방식으로 다섯 번째 글자를 네 번째로 읽고, 이어서 여섯 번째 글자를 읽는다.
도약 기호 onetwo2가 붙은 글자가 둘이지만 이미 읽은 첫 번째 글자는 후보에서 빠지므로 네 번째 글자를 읽는다. 이제 여섯 글자를 모두 읽었고 다음에 읽을 글자가 없으므로 읽기를 끝낸다. 두 번째, 세 번째, 첫 번째, 다섯 번째, 여섯 번째, 네 번째 글자 순으로 읽었으므로 답은 2, 3, 1, 5, 6, 4다.
입력
입력은 여러 데이터셋으로 이루어진다. 각 데이터셋의 형식은 다음과 같다.
N
mark1
.
.
.
markN
은 한문의 글자 수를 나타내는 양의 정수다 (). 는 번째 글자에 붙은 반환 기호를 나타낸다.
Re 기호는 소문자 v 한 글자로 적는다. 도약 기호는 종류를 나타내는 한 글자 이상의 소문자 뒤에 번호인 양의 정수를 바로 이어 붙여 적는다. 종류에는 v를 포함해 어떤 소문자 문자열도 올 수 있으므로, 기호는 숫자를 기준으로 읽는다. 한 글자에는 도약 기호가 최대 하나, Re 기호가 최대 하나 붙는다. 두 기호가 한 글자에 함께 붙으면 도약 기호를 먼저 적고 그 뒤에 Re 기호 v를 적는다. 이런 경우는 번호가 1인 도약 기호에서만 나타난다고 가정해도 된다.
번째 글자에 반환 기호가 없으면 는 -다. 의 길이는 20을 넘지 않는다.
입력은 항상 올바른 형식이라고 가정해도 된다. 즉 위 규칙을 따르는 읽기 순서가 정확히 하나 있고, 그 순서에서 모든 글자를 정확히 한 번씩 읽는다.
번째 글자에는 Re 기호가 붙지 않는다고 가정해도 된다.
이면 입력이 끝난다. 이 줄에는 아무것도 출력하지 않는다.
출력
각 데이터셋마다 줄을 출력한다. 첫 줄에는 가장 먼저 읽는 글자의 위치를, 둘째 줄에는 두 번째로 읽는 글자의 위치를 출력하고, 나머지 줄도 같은 방식으로 출력한다. 위치는 1부터 센다.