트리 탐색기 (Hard)
시간 제한1초메모리 제한1024 MB
폴더 트리에서 커서를 옮기는 move 명령과 폴더를 접거나 펴는 toggle 명령을 처리하고, 각 move 후 커서가 가리키는 폴더 번호를 출력합니다.
문제
폴더 구조를 쉽게 탐색할 수 있는 트리 탐색기 기능을 개발하고 있습니다.
폴더에는 번부터 번까지 번호가 붙어 있습니다. 폴더는 트리 형태의 계층 구조를 이루며, 한 폴더는 다른 폴더를 하위 폴더로 가질 수 있습니다. 어떤 폴더가 다른 폴더를 포함한다는 것은, 그 폴더의 하위 폴더이거나 하위 폴더가 포함하는 폴더라는 뜻입니다. 번 폴더는 최상위 폴더로, 다른 모든 폴더를 포함합니다.
탐색기는 번 폴더의 하위 폴더들을 목록에 표시합니다. 번 폴더 자체는 표시하지 않습니다. 모든 폴더는 펼치거나 접을 수 있습니다. 처음에는 모든 폴더가 접혀 있습니다. 폴더를 펼치면 그 하위 폴더들이 펼친 폴더 바로 아래에 들여쓰기되어 나타납니다. 폴더를 접으면 그 안에 포함된 모든 폴더가 목록에서 사라집니다. 접었던 폴더를 다시 펼치면, 포함된 각 폴더는 이전의 펼침 또는 접힘 상태를 그대로 유지합니다. (그림 1)

(그림 1) 폴더를 펼치고 접는 예제. ▽은 펼쳐진 폴더를, ▶은 접힌 폴더를 나타냅니다.
탐색기에 커서 기능을 추가합니다. 커서는 처음에 번 폴더의 첫 번째 하위 폴더를 가리킵니다. 다음 두 가지 명령어를 구현해야 합니다.
move: 커서를 만큼 아래로 이동합니다. 가 음수이면 만큼 위로 이동합니다. 이동하다가 목록의 시작이나 끝에 도달하면 더 이상 이동하지 않고 그 자리에 멈춥니다. (그림 2)toggle: 커서가 가리키는 폴더가 접혀 있으면 펼치고, 펼쳐져 있으면 접습니다.

(그림 2) move 명령어를 사용하는 예제
주어진 개의 명령어를 모두 수행하는 프로그램을 작성하세요.
입력
첫 줄에 폴더의 수 과 명령의 수 가 공백으로 구분되어 주어집니다. (; )
다음 개의 줄에 폴더의 계층 구조가 주어집니다. 번째 줄에는 번 폴더의 하위 폴더 개수와, 하위 폴더 번호들이 표시되는 순서대로 공백으로 구분되어 주어집니다. 두 폴더가 서로를 포함하는 관계이거나, 두 폴더가 같은 하위 폴더를 공유하는 경우는 없습니다.
다음 개의 줄에 수행할 명령어가 한 줄에 하나씩 차례로 주어집니다. move 명령어와 함께 주어지는 수 의 절댓값은 을 넘지 않습니다. move 명령어는 적어도 하나 이상 주어집니다.
출력
move 명령어를 수행할 때마다, 이동 후 커서가 위치한 폴더의 번호를 한 줄에 하나씩 출력하세요.