상자들의 습격
시간 제한1초메모리 제한128 MB
원점에서 발사된 레이저가 축에 평행한 상자들을 만나 부수고 반사되는 과정을 시뮬레이션해 파괴 순서를 출력한다.
문제
상자 떼가 당신을 공격하고 있습니다. 상자는 모두 개 ()이며, 각 상자는 변이 좌표축과 평행한 축 정렬 직사각형입니다. 당신에게는 방어 수단으로 거대한 레이저가 있습니다.
레이저는 원점에 놓여 있고, 정해진 한 방향으로 광선 하나를 발사합니다. 광선이 어떤 상자에 닿으면 그 상자를 파괴하고 그 상자에서 반사됩니다.
반사 규칙은 광선이 상자에 처음 닿는 위치에 따라 정해집니다.
- 첫 교점이 상자의 수평 변 위에 있으면, 광선 방향의 수직 성분이 반대로 바뀝니다.
- 첫 교점이 상자의 수직 변 위에 있으면, 수평 성분이 반대로 바뀝니다.
- 광선이 상자의 모서리(수평 변과 수직 변이 만나는 점)에 처음 닿으면, 수평 성분과 수직 성분이 모두 반대로 바뀝니다.
파괴된 상자는 사라지므로, 광선은 그 뒤로 그 상자가 있던 자리를 자유롭게 통과할 수 있습니다.
파괴되는 상자들의 번호를 파괴되는 순서대로 출력하세요.
어떤 두 상자도 공통점을 갖지 않으며, 어떤 상자도 원점을 내부나 경계에 포함하지 않음이 보장됩니다.
입력
첫째 줄에 상자의 개수 이 주어집니다.
둘째 줄에 두 정수 와 (, 둘이 동시에 은 아님)가 주어집니다. 아무 방해가 없을 때 원점에서 발사된 광선은 점 를 지납니다.
이어지는 개의 줄에는 각각 네 정수 , , , (, )가 주어지며, 이는 번째 상자를 나타냅니다. 이 상자의 왼쪽 아래 꼭짓점은 이고 오른쪽 위 꼭짓점은 입니다. 상자에는 입력 순서대로 번부터 번까지 번호가 매겨집니다.
출력
파괴되는 상자의 개수를 ()라고 합시다. 개의 줄을 출력하며, 번째 줄에는 번째 반사에서 파괴되는 상자의 번호를 출력합니다. 이면 아무것도 출력하지 않습니다.