룩 배치
시간 제한1초메모리 제한128 MB
각 로크마다 주어진 직사각형 안에 행과 열이 겹치지 않도록 n개의 로크를 배치하고, 가능하면 사전순으로 가장 작은 배치를 출력한다.
문제
크기의 체스판()에 룩 개를 놓으려고 합니다. 배치는 다음 규칙을 만족해야 합니다.
- 각 에 대해 번 룩은 두 꼭짓점 와 로 주어지는 직사각형 안에 놓여야 합니다. 여기서 는 직사각형의 왼쪽 위 칸(행, 열)이고 는 오른쪽 아래 칸이며, , 입니다. 체스판의 왼쪽 위 칸은 , 오른쪽 아래 칸은 입니다. 즉 번 룩이 놓이는 칸의 행은 , 열은 범위 안에 있어야 합니다.
- 어떤 두 룩도 서로 공격할 수 없습니다. 즉 두 룩이 같은 행이나 같은 열에 놓일 수 없습니다.
모든 룩을 각자의 직사각형 안에, 서로 공격하지 않도록 놓을 수 있는지 판단하고, 가능하다면 그러한 배치 하나를 출력하세요.
입력
첫 번째 줄에 정수 ()이 주어집니다. 이어지는 개의 줄에는 각각 네 정수 , , , 가 공백 하나로 구분되어 주어지며, 번 룩의 직사각형을 나타냅니다(, , 모든 값은 이상 이하).
출력
유효한 배치가 존재하지 않으면 NIE(폴란드어로 "아니오") 한 단어만 출력합니다.
그렇지 않으면 개의 줄을 출력합니다. 번째 줄에는 번 룩의 행과 열을 공백 하나로 구분해 출력하며, 행은 , 열은 범위 안에 있어야 합니다. 룩은 입력에서 직사각형이 주어진 순서와 같은 순서로 출력합니다.
유효한 배치가 여러 개일 수 있으므로 사전순으로 가장 작은 배치를 출력합니다. 두 배치는 값을 순서대로 나열한 수열, 즉 1번 룩의 행, 1번 룩의 열, 2번 룩의 행, 2번 룩의 열, 이런 순서로 비교합니다. 다시 말해 1번 룩의 행을 가능한 한 작게, 그다음 그 열을 가능한 한 작게, 그다음 2번 룩의 행, 그다음 그 열을 작게 하는 식으로 최소화합니다.