//============================================================================
// Name : POJ_2907.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : 递归搜索
//============================================================================
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int point[15][2];
int n, x, y;
bool flag[15];
int dis(int start,int des)
{
int a = point[start][0] -point[des][0];
if(a < 0)
a = -a;
int b = point[start][1] - point[des][1];
if(b < 0)
b = -b;
return a+b;
}
int dfs(int p,int sum,int c)
{
int i,t;
if(c == n)
{
return sum + dis(p,0);
}
int min = 0x0FFFFFFF;
for (i = 1; i <= n; i++)
{
if(!flag[i])
{
flag[i] = true;
t = dfs(i,sum+dis(p,i),c+1);
if(t < min )
min = t;
flag[i] = false;
}
}
return min;
}
int main()
{
freopen("in", "r", stdin);
int t, i;
scanf("%d", &t);
while (t--)
{
scanf("%d %d", &x, &y);
scanf("%d %d", &(point[0][0]), &(point[0][1]));
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
flag[i] = false;
scanf("%d %d", &(point[i][0]), &(point[i][1]));
}
printf("The shortest path has length %d/n",dfs(0,0,0));
}
return 0;
}