유리판 자르기

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

제프 아저씨는 창문과 액자에 쓰이는 유리판을 파는 유리 가게를 운영합니다. 알다시피 유리판은 한쪽 모서리에서 맞은편 모서리까지 직선으로 이어지는 자름선을 따라서만 자를 수 있습니다. 아래 그림은 하나의 유리판을 세 개의 더 작은 유리판으로 자르는 방법을 보여 줍니다.

제프 아저씨는 보통 다음과 같이 일합니다. 먼저 창문이나 액자에 쓸 작은 직사각형 유리판 주문을 여러 개 모읍니다. 그런 다음 큰 직사각형 유리판 하나 위에, 어떤 두 직사각형도 겹치지 않도록 각 작은 직사각형의 위치를 표시합니다. 마지막으로, 자를 조각의 한쪽 모서리에서 맞은편 모서리까지 곧게 이어지는 수평·수직 자름을 차례로 수행하여 모든 손님의 유리판을 만들어 냅니다.

이 마지막 단계(실제로 큰 유리판을 자르는 일)가 세상에서 가장 지루한 일이기 때문에, 제프 아저씨는 여러분에게 도움을 청합니다. 큰 직사각형 유리판과 표시된 각 직사각형의 왼쪽 아래·오른쪽 위 좌표가 주어졌을 때, 모서리에서 모서리까지의 자름을 어떤 순서로 수행하면 되는지 구하는 프로그램이 필요합니다. 이 자름 목록은 아저씨 대신 지루한 절단을 수행할 기계에 입력됩니다.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 창문과 액자의 개수를 나타내는 정수 $N$이 주어집니다 ($2 \le N \le 2000$). 이어지는 $N$개의 줄에는 각각 네 정수 $X_1$, $Y_1$, $X_2$, $Y_2$가 주어지며, $(X_1, Y_1)$과 $(X_2, Y_2)$는 표시된 직사각형의 왼쪽 아래·오른쪽 위 좌표입니다 ($-5000 \le X_1, Y_1, X_2, Y_2 \le 5000$; $X_1 < X_2$이고 $Y_1 < Y_2$).

각 테스트 케이스에서 다음을 가정할 수 있습니다.

  • 표시된 직사각형들은 서로 겹치지 않으며(경계에서 맞닿을 수는 있습니다) 큰 유리판을 남는 유리 없이 완전히 채웁니다. 따라서 큰 유리판의 왼쪽 아래·오른쪽 위 좌표는 직사각형들의 좌표로부터 알아낼 수 있습니다.
  • 큰 유리판은 항상 모서리에서 모서리까지의 자름을 차례로 수행하여 표시된 직사각형들로 분리할 수 있습니다.

$N = 0$인 줄은 입력의 끝을 의미하며 처리하지 않습니다.

출력

각 테스트 케이스에 대해, 큰 유리판을 원하는 작은 유리판들로 분리하기 위해 수행해야 하는 자름의 순서 목록을 출력합니다. 각 자름은 한 줄에 네 정수 $X_1$ $Y_1$ $X_2$ $Y_2$로 출력하며, 이는 자름의 두 끝점을 나타냅니다.

  • 수평 자름은 $Y_1 = Y_2$이고 $X_1 < X_2$입니다.
  • 수직 자름은 $X_1 = X_2$이고 $Y_1 < Y_2$입니다.

어떤 자름은 현재 조각의 한쪽 모서리에서 맞은편 모서리까지 곧게 이어지면서 어떤 표시된 직사각형의 내부도 가로지르지 않아 그 조각을 두 조각으로 나눌 때에만 수행할 수 있습니다. 동시에 여러 자름이 가능할 수 있습니다. 답을 유일하게 만들기 위해, 항상 가능한 자름 중 $X_1$이 가장 작은 것을 수행하고, 같으면 $Y_1$이 가장 작은 것을 수행합니다. 한 번에 하나씩 자르고 매번 다시 판단하며, 모든 조각이 하나의 표시된 직사각형이 될 때까지 계속합니다.

서로 이웃한 테스트 케이스의 목록은 빈 줄로 구분합니다.