#include<iostream>
int m, n; //m为测试案例
int sx, sy, ex, ey;
int data[5][5] = { 0 };
int vis[5] = { 0 };
int min;
int d(int a, int s, int d, int f)
{
	int he1 = a - d> 0 ? a - d : d - a;
	int he2 = s - f > 0 ? s - f : f - s;
	return he1 + he2;
}
void dfs(int sx, int sy, int num, int dis, int step)
{
	if (dis + d(sx, sy, ex, ex)> min)
	{
		return;
	}
	if (step == num)
	{

		min = dis + d(sx, sy, ex, ey);
		return;
	}
	for (int i = 0; i < n; i++)
	{
		if (!vis[i])
		{			vis[i] = 1;
			dis += (d(sx, sy, data[i][0], data[i][1]) + data[i][4]);
			dfs(data[i][2], data[i][3], num, dis, step + 1);
			dis -= (d(sx, sy, data[i][0], data[i][1]) + data[i][4]);
			dis += (d(sx, sy, data[i][2], data[i][3]) + data[i][4]);
			dfs(data[i][0], data[i][1], num, dis, step + 1);
			dis -= (d(sx, sy, data[i][2], data[i][3]) + data[i][4]);
			vis[i] = 0;
		
	
		}
	}
}
int main()
{
	freopen("input.txt", "r", stdin);

	scanf("%d", &m);

	while (m--)
	{

		scanf_s("%d", &n);  //虫洞个数
		scanf_s("%d%d%d%d", &sx, &sy, &ex, &ey);
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < 5; j++)
				scanf_s("%d", &data[i][j]);
		}
		min = d(sx, sy, ex, ey);
		
		for (int i = 1; i <= n; i++)
			dfs(sx, sy, i, 0, 0); //i 表示用几个虫洞
	}
	printf("%d", min);
}