당구
시간 제한8초메모리 제한1024 MB
당구대 위 공과 코인의 위치가 주어질 때, 45도 방향으로 친 공이 쿠션에 반사된 뒤 다른 공이나 구멍에 막히기 전에 코인에 닿는 공 번호를 모두 찾습니다.
문제
당구와 비슷한 상금 게임에 도전한다. 이 게임에는 당구대 한 대, 크기가 같은 공 여러 개, 상금 코인이 사용된다. 당구대 윗부분에는 천으로 덮인 평평한 직사각형 영역이 있고, 그 가장자리는 탄성이 있는 쿠션으로 막혀 있다. 공은 이 영역 위에서 움직인다. 쿠션은 공의 중심이 너비 , 길이 인 직사각형 영역, 즉 이동 가능 영역 안에만 머물도록 한다.
이동 가능 영역의 네 꼭짓점 좌표를 , , , 라고 하자. 게임을 시작할 때 모든 공과 코인은 중심이 이동 가능 영역 내부의 서로 다른 격자점에 놓인다. 즉 경계 위에 있지 않은 점이다. 공과 코인은 작아서, 한 공이 다른 공이나 코인의 중심을 향해 가지 않는 한 서로 닿지 않는다.
이동 가능 영역의 변에 대해 45도 방향으로 공 하나를 큐로 친다. 이 방향은 좌표와 좌표가 모두 증가하는 방향이다. 맞은 공은 이동 가능 영역의 경계에 닿거나, 다른 공에 부딪히거나, 네 모서리의 구멍 중 하나에 빠질 때까지 직진한다. 공이 경계에 닿으면 입사각과 반사각이 같도록 쿠션에 튕겨 나온 뒤 계속 직진한다. 다른 공에 부딪히거나 모서리 구멍에 빠지면 게임이 끝난다. 다른 공에 부딪히거나 구멍에 빠지기 전에 코인에 닿으면 코인을 얻는다.
코인을 얻으려면 어느 공을 쳐야 하는가? 코인을 얻게 해 주는 공을 모두 구하라.

그림 F-1: 예제 입력의 첫 번째와 두 번째 데이터셋.
첫 번째 데이터셋에서 2번 공을 치면 코인 쪽으로 바로 간다. 4번 공은 오른쪽 쿠션에 튕긴 뒤 코인에 닿는다. 1번 공은 2번 공에 부딪히고, 3번 공은 오른쪽 위 구멍에 빠지므로, 이 두 공을 치면 코인을 얻지 못한다.
두 번째 데이터셋에서 1번 공만 치면, 공은 쿠션에 5번 튕긴 뒤 처음 위치를 지난다. 두 번 더 튕긴 뒤에 코인에 도달한다.
입력
입력은 여러 개의 데이터셋으로 이루어지며, 각 데이터셋은 다음 형식으로 주어진다.
첫 줄에는 다섯 개의 정수가 주어진다. 와 는 이동 가능 영역의 너비와 길이이며, , 을 만족한다. 와 는 코인의 좌표 이며, , 를 만족한다. 은 공의 개수이며, 를 만족한다.
공은 1번부터 번까지 번호가 매겨진다. 이어지는 개 줄 중 번째 줄에는 번 공의 중심 좌표를 나타내는 두 정수 와 가 주어진다. 이들은 , 를 만족한다. 코인과 모든 공의 위치는 서로 달라야 한다.
입력의 끝은 0 다섯 개로 이루어진 줄로 표시된다. 데이터셋은 50개를 넘지 않는다. 모든 데이터셋의 의 합은 를 넘지 않는다.
출력
각 데이터셋에 대해, 코인을 얻기 위해 쳐야 하는 모든 공의 번호를 오름차순으로 한 줄에 출력한다. 번호는 공백 하나로 구분한다. 그런 공이 없으면 "No"를 한 줄에 출력한다.