장기는 바둑과 함께 오랜 전통을 가진 보드게임이다. 여러 종류의 기물로 상대의 궁을 제압하는 것이 목적이고, 몇 수 앞을 내다보며 자기 기물을 운용하는 것이 기본 전략이다. 그중 馬는 민첩하게 움직여서 쓰임이 많다. 다만 움직임이 독특해서 초보자가 다루기는 쉽지 않다. 馬를 잘 쓰려면 지금 자리에서 가려는 지점까지 최소 몇 번에 갈 수 있는지부터 볼 줄 알아야 한다.
馬의 이동 방식은 아래 그림과 같다. 한 번의 이동으로 날 일(日) 자를 가로지른다. 체스의 knight와 비슷하지만, 馬는 직선으로 한 칸 간 뒤 대각선으로 한 칸 더 가는 것이어서 중간 칸에 다른 기물이 있으면 그 위를 넘어가지 못한다.

그림 1: 馬의 이동 방식
馬는 한 번의 이동으로 한 칸 앞으로 나아간 뒤 대각선으로 한 칸 더 가서, 전체적으로 날 일(日) 자를 가로지른다.
붉게 칠한 원이 (중간에 다른 기물이 없을 때) 馬가 한 번에 갈 수 있는 자리이다.
장기판에 馬와 다른 기물이 놓여 있을 때, 현재 위치에서 목적지까지 馬가 최소 몇 번 움직여야 하는지 구하는 프로그램을 작성하시오. 장기판은 무한히 넓다고 가정한다. 馬의 현재 좌표와 목적지 좌표, 그리고 다른 기물의 좌표가 주어진다. 馬가 움직이는 동안 다른 기물은 제자리에 그대로 있고, 이 무한한 장기판에는 궁(대각선 이동로가 그어진 자리)이 없다고 가정한다. 馬가 완전히 막혀서 목적지까지 가지 못하는 경우도 없다고 가정한다.
입력은 표준 입력으로 받는다. 첫 줄에 테스트 케이스의 개수 T (1≤T≤20)가 주어진다.
각 테스트 케이스의 첫째 줄에는 馬의 현재 좌표가, 둘째 줄에는 馬가 도착해야 할 좌표가 주어진다. 셋째 줄에는 다른 기물의 개수 K (0≤K≤10000)가 주어지고, 이어지는 K개의 줄에 다른 기물의 좌표가 한 줄에 하나씩 주어진다. 이 좌표는 馬가 설 수 없는 자리이다. 모든 좌표는 −10000 이상 10000 이하의 정수 두 개이고, 공백으로 구분된다.
출력은 표준 출력으로 한다. 각 테스트 케이스마다 馬의 최소 이동 횟수를 한 줄에 하나씩 출력한다.