분기기 조작 지시서
시간 제한2초메모리 제한256 MB
이진 스위치 트리로 들어오는 열차를 순서대로 시뮬레이션해서 각 열차를 목표 승강장으로 보내는 가장 늦은 최소 전환 명령을 출력합니다.
문제
잉그리드는 큰 기차역의 역장이고, 여러 업무 가운데 열차를 알맞은 승강장으로 보내는 일도 맡는다. 역에는 입구가 하나 있고, 열차를 다른 분기기나 승강장으로 보내는 분기기가 여러 개 있다.
분기기에는 들어오는 선로가 하나, 나가는 선로가 둘 있다. 승강장에는 들어오는 선로가 하나 있고, 역 입구에는 나가는 선로가 하나 있다. 나가는 선로는 각각 들어오는 선로 하나와 이어지고, 그 반대도 마찬가지다. 모든 분기기와 승강장은 역 입구에서 갈 수 있다.
승강장 쪽 선로는 막혀 있고, 열차는 승강장에 도착하는 즉시 사라진다고 본다.
매일 아침 잉그리드는 시간표를 보고 어떤 분기기를 언제 바꿀지 적은 조작 지시서를 만든다. 이 일을 대신 해 주는 프로그램을 작성하라.
입력
첫 줄에 역에 있는 분기기와 승강장의 개수 이 주어진다 ().
다음 개 줄 가운데 번째 줄은 번호가 인 분기기 또는 승강장을 설명한다. 줄은 승강장이면 문자 p로, 분기기면 문자 s로 시작한다. 이어서 정수 가 주어지는데, 들어오는 선로가 이어진 분기기의 번호이고 역 입구와 이어져 있으면 0이다 (). 승강장 줄에는 마지막으로 승강장 이름인 알파벳 소문자 하나가 더 주어지며, 이름은 서로 다르다.
열차가 이어진 두 분기기 사이, 또는 분기기와 승강장 사이를 지나는 데 정확히 1분이 걸린다. 역 입구와 첫 분기기 사이도 1분이다. 즉 시각 에 역 입구에 있던 열차는 시각 에 입구와 이어진 분기기에 있다. 아침에 모든 분기기는 번호가 더 작은 쪽으로 열차를 보내도록 맞춰져 있다.
다음 줄에 시간표에 있는 열차의 수 이 주어진다 (). 이어지는 개 줄에는 정수 와 문자 가 주어진다 (, ). 는 열차가 역 입구에 도착하는 시각이고 단위는 분이며, 는 그 열차가 가야 할 승강장의 이름이다.
출력
첫 줄에 지시서에 담긴 명령의 개수 를 출력한다. 이어지는 개 줄에 명령을 하나씩 정수 두 개 와 로 출력한다 (, ). 분기기 를 분과 분 사이에 반대 방향으로 바꾼다는 뜻이다.
정답으로 인정하는 지시서는 하나뿐이다. 다음 규칙을 그대로 따르라.
- 모든 열차가 목적지 승강장에 도착한다.
- 명령의 개수 는 그 조건에서 가능한 가장 작은 값이다.
- 각 명령의 시각은 가능한 가장 늦은 시각이다. 즉 어떤 분기기를 바꾸는 시각은, 바뀐 방향이 필요한 열차가 그 분기기에 도착하는 시각과 같다.
- 명령은 시각 의 오름차순으로 출력하고, 시각이 같으면 분기기 번호의 오름차순으로 출력한다.
필요한 명령이 하나도 없으면 첫 줄에 0만 출력한다.