이 패스도 지나가리라

시간 제한3초메모리 제한256 MB

요약
1번 선수와 동료를 잇는 직선 구간이 수비수가 지키는 칸에 닿지 않는 동료를 모두 찾습니다.
난이도

보통10점 중 4점

유형
기하, 완전 탐색
정답자
아직 제출이 없습니다

문제

축구장을 rr행 cc열 격자로 나타낸다. 선수는 저마다 격자 한 칸을 차지하고, 공격수 oo명과 수비수 dd명은 모두 다른 칸에 서 있다. 공격수는 입력에 나온 순서대로 1번부터 차례로 번호를 받고, 공은 1번 공격수가 잡고 있다.

수비수는 패스를 가로채려고 인접한 칸으로 움직일 수 있다. 그래서 수비수 한 명이 지키는 범위는 자기가 선 칸에 변이나 꼭짓점으로 맞닿은 여덟 칸을 더한 아홉 칸이다. 이 가운데 격자 밖으로 나가는 칸은 빼고 센다. 수비수 여러 명이 지키는 범위는 겹쳐도 된다.

kk번 공격수가 열려 있는지는 선분 하나로 판정한다. 1번 공격수가 선 칸의 중심과 kk번 공격수가 선 칸의 중심을 선분으로 잇고, 이 선분이 수비수가 지키는 칸을 한 점도 건드리지 않으면 kk번 공격수는 열려 있다. 지키는 칸의 꼭짓점 한 점만 스쳐도 패스는 가로채인다. 수비수가 1번 공격수의 칸이나 받는 사람의 칸을 지키고 있으면 선분의 끝점이 이미 그 칸 안에 있으므로 그 패스는 열리지 않는다. 공격수는 다른 공격수의 패스를 막지 않는다.

1번 공격수가 패스할 수 있는 공격수를 모두 구하라.

입력

입력은 테스트 케이스 여러 개로 이루어진다.

각 테스트 케이스의 첫 줄에 정수 네 개 rr, cc, oo, dd가 공백으로 구분되어 주어진다. 차례로 격자의 행 수, 열 수, 공격수 수, 수비수 수다. (1≤r≤501 \le r \le 50, 1≤c≤501 \le c \le 50, 1≤o1 \le o, 0≤d0 \le d, o+d≤r×co + d \le r \times c)

다음 oo개 줄에는 공격수가 선 칸의 행 번호와 열 번호가 한 줄에 한 명씩 주어진다. 행 번호와 열 번호는 0부터 시작하므로 행 번호는 rr보다 작고 열 번호는 cc보다 작다. 이어지는 dd개 줄에는 같은 형식으로 수비수의 위치가 주어진다. 두 선수가 같은 칸에 서는 경우는 없다.

공격수는 주어진 순서대로 1번부터 번호를 받고, 1번이 공을 잡고 있다.

0 0 0 0이 적힌 줄이 나오면 입력이 끝난다. 이 줄은 테스트 케이스가 아니다.

출력

각 테스트 케이스마다 한 줄에 Case x:를 출력하고, 이어서 1번 공격수가 패스할 수 있는 공격수의 번호를 오름차순으로 출력한다. 번호 앞에는 공백을 하나씩 붙인다. xx는 1부터 세는 테스트 케이스 번호다.

패스할 수 있는 공격수가 없으면 번호 없이 Case x:만 출력한다.

예제8

  1. 예제 1

    입력
    7 7 4 2
    5 1
    6 5
    0 1
    0 6
    2 0
    4 5
    2 5 2 1
    0 0
    0 4
    1 2
    1 4 4 0
    0 0
    0 1
    0 2
    0 3
    0 0 0 0
    
    예상 출력
    Case 1: 2
    Case 2:
    Case 3: 2 3 4
    
  2. 예제 2

    입력
    9 9 2 1
    8 0
    0 8
    5 6
    9 9 2 1
    8 0
    0 8
    6 6
    0 0 0 0
    
    예상 출력
    Case 1:
    Case 2: 2
    
  3. 예제 3

    입력
    5 5 3 1
    2 2
    0 0
    4 4
    1 2
    5 5 3 1
    0 0
    4 4
    0 4
    3 3
    0 0 0 0
    
    예상 출력
    Case 1:
    Case 2: 3
    
  4. 예제 4

    입력
    1 1 1 0
    0 0
    1 2 2 0
    0 0
    0 1
    2 2 2 1
    0 0
    1 1
    0 1
    3 3 2 1
    0 0
    2 2
    2 0
    0 0 0 0
    
    예상 출력
    Case 1:
    Case 2: 2
    Case 3:
    Case 4:
    
  5. 예제 5

    입력
    1 50 3 1
    0 0
    0 49
    0 20
    0 30
    1 50 2 1
    0 0
    0 10
    0 40
    0 0 0 0
    
    예상 출력
    Case 1: 3
    Case 2: 2
    
  6. 예제 6

    입력
    50 1 3 1
    0 0
    49 0
    10 0
    25 0
    50 1 2 0
    49 0
    48 0
    0 0 0 0
    
    예상 출력
    Case 1: 3
    Case 2: 2
    
  7. 예제 7

    입력
    6 6 3 2
    0 2
    5 2
    2 5
    0 0
    5 5
    0 0 0 0
    
    예상 출력
    Case 1: 2 3
    
  8. 예제 8

    입력
    10 11 4 7
    5 0
    5 10
    0 10
    9 10
    0 5
    1 5
    2 5
    3 5
    7 5
    8 5
    9 5
    0 0 0 0
    
    예상 출력
    Case 1: 2