Visual Python++
시간 제한5초메모리 제한512 MB
n개의 왼쪽 위 모서리와 n개의 오른쪽 아래 모서리를 짝지어 사각형들이 올바르게 중첩되거나 분리되도록 만들고, 불가능하면 syntax error를 출력한다.
문제
Visual Python++ 프로그래밍 언어에서 문장 블록은 문자로 이루어진 직사각형이다. 왼쪽 위 모서리는 행 열에 있고, 오른쪽 아래 모서리는 행 열에 있다. 이고 인 위치 의 문자는 모두 그 블록에 속한다. 이 위치 중 , , , 가운데 하나를 만족하는 위치가 블록의 테두리다.
블록은 몇 단계든 중첩할 수 있다. 문법에 맞는 프로그램에서 두 블록은 한쪽이 다른 쪽 안에 들어가 있거나, 위치를 하나도 공유하지 않는다. 두 경우 모두 테두리가 겹치면 안 된다. 따라서 블록 가 블록 안에 들어가 있으면 와 를 만족하고, 중첩 관계가 아닌 두 블록은 공통 위치가 없다.
프로그래머는 직사각형을 직접 그리지 않는다. 다 그리려면 시간이 너무 오래 걸리므로 블록의 왼쪽 위 모서리에 문자 p 하나를, 오른쪽 아래 모서리에 문자 y 하나를 적는다. 그러면 파서가 모서리를 짝지어 프로그램의 중첩 구조를 복원한다.
파서에서 이 짝짓기를 맡는 부분을 작성하라.
입력
첫째 줄에 모서리 쌍의 개수 이 주어진다 ().
다음 개 줄에 두 정수 과 가 주어진다 (). 행 열에 왼쪽 위 모서리가 있다는 뜻이다. 이어지는 개 줄에는 같은 형식으로 오른쪽 아래 모서리가 주어진다. 개 모서리 위치는 모두 서로 다르다.
출력
모서리를 짝지어 블록 개가 문법에 맞는 프로그램을 이루게 할 수 있으면 개 줄을 출력한다. 번째 줄에는 번째 왼쪽 위 모서리와 짝을 이루는 오른쪽 아래 모서리의 번호 를 출력한다. 왼쪽 위 모서리와 오른쪽 아래 모서리는 각각 입력에 나온 순서대로 1번부터 번까지 번호를 매긴다. 문법에 맞는 프로그램을 만드는 짝짓기는 많아야 하나이므로 답은 유일하다.
그런 짝짓기가 없으면 syntax error를 한 줄에 출력한다.