Jetpack Sniper 3000 Fragfest Extreme

시간 제한1초메모리 제한128 MB

문제

당신은 새 온라인 게임 Jetpack Sniper 3000 Fragfest Extreme 의 베타 테스터입니다. 플레이어들은 제트팩을 메고 대도시 상공을 날아다니며 레이저 총으로 서로를 쏩니다. 몸을 숨길 수 있는 유일한 엄폐물은 도시 곳곳에 솟아 있는 유리 마천루(고층 빌딩)뿐입니다.

게임을 돕기 위해, 당신은 현재 당신이 쏠 수 있는(또는 당신을 쏠 수 있는) 플레이어가 누구인지 알려 주는 프로그램을 작성했습니다. 즉, 장애물에 가리지 않고 직선으로 당신의 위치를 바라볼 수 있는 플레이어들입니다.

입력

첫 줄에는 도시의 수를 나타내는 정수 $n$ 이 주어집니다.

각 도시는 $10 \times 10$ 격자의 블록으로 이루어져 있습니다. 각 블록에는 높이가 정수로 $0$ 부터 $9$ 까지인 마천루가 하나씩 서 있습니다. 한 도시는 $10$ 개의 줄, 각 줄에 $10$ 개의 숫자로 주어지며, 위에서부터 $0$ 번째 행 $y$, 왼쪽에서부터 $0$ 번째 열 $x$ 에 있는 숫자가 그 블록에 서 있는 마천루의 높이입니다.

격자 다음에는 네 쌍의 좌표가 한 줄에 주어집니다. 첫 번째는 당신의 위치이고, 나머지 세 쌍은 각각 플레이어 A, B, C의 위치입니다. 각 위치는 (x, y, height) 형식으로 주어지며, $x$ 는 왼쪽에서 오른쪽으로, $y$ 는 위에서 아래로 커지고, height 는 지면에서 위로 잰 높이입니다. 점 $(0, 0, 0)$ 은 격자의 왼쪽 위 모서리이며 지면 높이에 있습니다.

참고:

  • 좌표는 실수(소수점)일 수 있습니다.
  • 당신을 포함해 어떤 플레이어도 건물 내부나 그 표면, 모서리, 꼭짓점 위에 있지 않습니다. 또한 어떤 시선도 결과를 바꿀 만한 방식으로 건물의 면, 모서리, 꼭짓점에 접하지 않습니다.

출력

각 도시마다 먼저 헤더 Fragfest City #X 를 출력합니다. 여기서 X 는 도시의 번호로, 첫 번째 도시는 $1$, 두 번째 도시는 $2$ 와 같이 매깁니다. 그다음 플레이어 A, B, C 순서대로 한 줄씩 출력합니다. 건물이 그 플레이어에 대한 당신의 직선 시야를 가리지 않으면 Player Y is in sight 를, 가리면 Player Y is hiding 을 출력합니다(Y 는 플레이어의 문자입니다).

다음과 같이 단순화하여 가정합니다.

  1. 각 마천루는 크기가 $1 \times 1 \times \text{height}$ 인 직육면체입니다.
  2. 각 플레이어는 하나의 점입니다.
  3. 플레이어는 다른 플레이어의 시야를 가리지 않습니다.