팡고른 숲
시간 제한3초메모리 제한128 MB
사각형 중심과 적어도 한 그루의 나무를 지나는 직선 중 왼쪽 규칙으로 나무를 정확히 반씩 나누는 최소 각도 직선을 찾는다.
문제
엔트는 숲의 수호자다. 중간계에서 가장 나이가 많은 엔트인 나무수염은 자신이 지킬 나무와, 젊은 동료 엔트인 브레갈라드가 지킬 나무를 나누려고 한다.
두 엔트가 지키는 숲은 직사각형이며 숲 안의 나무는 짝수 그루다. 나무수염은 직선 하나를 그어 숲을 두 구역으로 나눈 뒤 한 구역은 자신이, 다른 구역은 브레갈라드가 맡으려 한다. 두 구역에 속한 나무의 수가 다르거나 넓이가 다르면 두 엔트는 몇 만 년 동안 다투게 되므로, 두 조건을 모두 공평하게 맞춰야 한다. 즉, 두 구역의 나무 수가 같고(각각 그루) 넓이도 같아야 한다.
경계선(직선) 위에 정확히 놓인 나무는 두 구역 중 어느 쪽에나 넣을 수 있지만, 양쪽에 동시에 넣을 수는 없다.
입력
입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫째 줄에 나무의 수 , 숲의 너비 , 숲의 높이 가 주어진다. 숲의 네 꼭짓점은 , , , 이다. 이어지는 개의 줄에 각 나무의 좌표 가 주어진다.
- , 은 짝수
- 이고, 와 가 동시에 짝수인 경우는 없다
- 모든 좌표는 정수이며 , 를 만족한다
- 같은 위치에 있는 나무는 없다
인 줄이 나오면 입력이 끝난다. 이 줄은 처리하지 않는다.
출력
공평하게 나누는 방법은 여러 가지일 수 있으므로, 다음 규칙으로 유일하게 정한 답을 출력한다.
경계선은 항상 숲의 중심 를 지난다. (중심을 지나는 직선은 언제나 직사각형의 넓이를 정확히 반으로 나눈다.) 경계선이 중심과 함께 적어도 한 그루의 나무를 지나도록 잡는다. 이 직선에 방향을 정하고, 직선의 왼쪽에 있는 나무들을 나무수염의 구역으로 삼는다. 여기서 '왼쪽'은 직선의 진행 방향에서 반시계 방향으로 돌린 쪽을 뜻한다. 직선 위에 정확히 놓인 나무는 좌표 가 작은 것부터 차례로 나무수염 쪽에 넣어, 나무수염의 나무가 정확히 그루가 되도록 한다.
중심과 어떤 나무를 함께 지나면서 이렇게 양쪽을 각각 그루로 만들 수 있는 방향의 직선이 여러 개라면, 방향의 각도(양의 축에서 반시계 방향으로 잰 범위의 값)가 가장 작은 것을 고른다.
각 테스트 케이스마다 나무수염의 구역에 속한 그루의 좌표를, 가 작은 순서로, 가 같으면 가 작은 순서로 정렬하여 한 줄에 한 그루씩 x y 형식으로 출력한다.