import java.util.Scanner;
public class Problem3 {
public static int currentMinLength = -1;
public static int currentLength = 0;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int scenarios = scanner.nextInt();
int[] results = new int[scenarios];
for (int i = 0; i < scenarios; ++i) {
int x = scanner.nextInt();
int y = scanner.nextInt();
int startX = scanner.nextInt();
int startY = scanner.nextInt();
int numberOfBeepers = scanner.nextInt();
int[][] beepers = new int[numberOfBeepers][2];
boolean[] visit = new boolean[numberOfBeepers];
for (int j = 0; j < numberOfBeepers; ++j) {
beepers[j][0] = scanner.nextInt();
beepers[j][1] = scanner.nextInt();
visit[j] = false;
}
currentLength = 0;
currentMinLength = -1;
depthFirstSearch(0, beepers, visit, startX, startY, startX, startY);
System.out.println("The shortest path has length " + currentMinLength);
}
}
public static void depthFirstSearch(int cur, int[][] beepers, boolean[] visit,
int startX, int startY, int lastX, int lastY) {
if (cur == beepers.length) {
int length = Math.abs(lastX - startX) + Math.abs(lastY - startY);
if (currentMinLength == -1 || currentMinLength > currentLength + length) {
currentMinLength = currentLength + length;
}
return;
}
for (int i = 0; i < beepers.length; ++i) {
if (visit[i]) continue;
int length = Math.abs(lastX - beepers[i][0]) + Math.abs(lastY - beepers[i][1]);
if (currentMinLength != -1 && length + currentLength > currentMinLength) continue;
currentLength += length;
visit[i] = true;
depthFirstSearch(cur + 1, beepers, visit, startX, startY, beepers[i][0], beepers[i][1]);
visit[i] = false;
currentLength -= length;
}
}
}