장기 馬

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

장기는 바둑과 함께 오랜 전통을 가진 보드게임이다. 여러 종류의 기물로 상대의 궁을 제압하는 것이 목적이고, 몇 수 앞을 내다보며 자기 기물을 운용하는 것이 기본 전략이다. 그중 馬는 민첩하게 움직여서 쓰임이 많다. 다만 움직임이 독특해서 초보자가 다루기는 쉽지 않다. 馬를 잘 쓰려면 지금 자리에서 가려는 지점까지 최소 몇 번에 갈 수 있는지부터 볼 줄 알아야 한다.

馬의 이동 방식은 아래 그림과 같다. 한 번의 이동으로 날 일(日) 자를 가로지른다. 체스의 knight와 비슷하지만, 馬는 직선으로 한 칸 간 뒤 대각선으로 한 칸 더 가는 것이어서 중간 칸에 다른 기물이 있으면 그 위를 넘어가지 못한다.


그림 1: 馬의 이동 방식
馬는 한 번의 이동으로 한 칸 앞으로 나아간 뒤 대각선으로 한 칸 더 가서, 전체적으로 날 일(日) 자를 가로지른다.
붉게 칠한 원이 (중간에 다른 기물이 없을 때) 馬가 한 번에 갈 수 있는 자리이다.

장기판에 馬와 다른 기물이 놓여 있을 때, 현재 위치에서 목적지까지 馬가 최소 몇 번 움직여야 하는지 구하는 프로그램을 작성하시오. 장기판은 무한히 넓다고 가정한다. 馬의 현재 좌표와 목적지 좌표, 그리고 다른 기물의 좌표가 주어진다. 馬가 움직이는 동안 다른 기물은 제자리에 그대로 있고, 이 무한한 장기판에는 궁(대각선 이동로가 그어진 자리)이 없다고 가정한다. 馬가 완전히 막혀서 목적지까지 가지 못하는 경우도 없다고 가정한다.

입력

입력은 표준 입력으로 받는다. 첫 줄에 테스트 케이스의 개수 TT (1T201 \le T \le 20)가 주어진다.

각 테스트 케이스의 첫째 줄에는 馬의 현재 좌표가, 둘째 줄에는 馬가 도착해야 할 좌표가 주어진다. 셋째 줄에는 다른 기물의 개수 KK (0K100000 \le K \le 10000)가 주어지고, 이어지는 KK개의 줄에 다른 기물의 좌표가 한 줄에 하나씩 주어진다. 이 좌표는 馬가 설 수 없는 자리이다. 모든 좌표는 10000-10000 이상 1000010000 이하의 정수 두 개이고, 공백으로 구분된다.

출력

출력은 표준 출력으로 한다. 각 테스트 케이스마다 馬의 최소 이동 횟수를 한 줄에 하나씩 출력한다.