레이저박스

면접 대비

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

요약
격자 위 오른쪽으로 꺾는 반사체들 사이를 지나가는 레이저의 경로를 시뮬레이션해서 빠져나가는 위치를 구합니다.
난이도

보통10점 중 4점

유형
시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

레이저박스는 광학 장비를 이용하는 게임이다. 게임판은 n×nn \times n 크기의 정사각형 격자점(grid point)들로 이루어져 있으며, 각 격자점에는 '오른쪽 회전기(right-turner)'라는 장치를 놓을 수 있고 이 장치가 여러 개 주어진다. 또한 루비 레이저가 하나 있는데, 어느 열의 맨 아래에 설치하면 광선은 그 열을 따라 북쪽으로 나아간다. 마찬가지로 열의 맨 위에서는 남쪽으로, 행의 시작에서는 동쪽으로, 행의 끝에서는 서쪽으로 광선을 쏠 수 있다.

게임을 시작할 때, 몇 개의 회전기를 격자점 위에 놓고 (꺼져 있는) 레이저를 게임판 테두리의 어딘가에 설치한다. 플레이어는 레이저를 켰을 때 광선이 어디로 빠져나올지 알아내야 한다. 회전기는 광선이 네 방향 중 어느 쪽에서 들어오든 상관없이 광선을 오른쪽으로 90도 꺾는다.

여러분의 프로그램은 바로 이 플레이어가 해야 할 일을 그대로 수행해야 한다.

입력

첫 줄에는 테스트 케이스의 수를 나타내는 양의 정수가 하나 주어진다. 각 테스트 케이스의 첫 줄에는 두 정수 nn과 rr가 주어지며, 1≤n≤501 \le n \le 50은 게임판의 크기, 1≤r≤501 \le r \le 50은 회전기의 개수이다. 이어지는 rr개의 줄에는 각 회전기의 좌표 x y가 하나씩 주어진다. 두 회전기가 같은 좌표를 갖는 경우는 없다.

마지막으로 레이저의 위치를 나타내는 두 정수가 한 줄에 주어진다. 여섯 번째 열의 맨 아래는 6 0, 일곱 번째 행의 시작은 0 7로 나타낸다. 이 0을 n+1n + 1로 바꾸면 각각 여섯 번째 열의 맨 위, 일곱 번째 행의 끝에 레이저가 놓인 것을 뜻한다.

출력

각 테스트 케이스마다, 광선이 게임판을 빠져나가는 좌표 X Y를 한 줄에 출력한다. 레이저와 같은 규칙이 적용되므로 XX가 00 또는 n+1n + 1이거나, YY가 00 또는 n+1n + 1이 된다. 만약 광선이 갇혀 게임판을 빠져나가지 못하면 0 0을 출력한다.

예제1

  1. 예제 1

    입력
    2
    2 3
    1 1
    1 2
    2 2
    3 1
    3 6
    1 1
    1 3
    2 2
    2 3
    3 1
    3 2
    2 0
    
    예상 출력
    2 0
    0 2