/*
poj 2060 建图: 如果 运完第一个顾客后 从 a能赶到b时,且还没到达第二个顾客的出发时间
*/
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
const int Maxn=2005;
vector<int>g[Maxn];
bool visted[Maxn];
int link[Maxn];
int n;
struct node
{
int time;
int x1,y1;
int x2,y2;
}a[Maxn];
int dfs(int x)
{
for(int i=0;i<g[x].size();i++)
{
int e=g[x][i];
if(!visted[e])
{
visted[e]=1;
if(link[e]==-1 || dfs(link[e]))
{
link[e]=x;
return 1;
}
}
}
return 0;
}
int main()
{
int t,x,y,x1,y1,x2,y2;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for (int i = 0 ; i <= n ; i ++ )g[i].clear() ;
memset(visted,0,sizeof(visted));
memset(link,-1,sizeof(link));
for(int i=0;i<n;i++)
{
scanf("%d:%d",&x,&y);
int time=60*x+y;
a[i].time=time;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
a[i].x1=x1;
a[i].y1=y1;
a[i].x2=x2;
a[i].y2=y2;
}
// printf("*\n");
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
int time1=abs(a[i].x2-a[i].x1)+abs(a[i].y1-a[i].y2);
int time2=abs(a[j].x1-a[i].x2)+abs(a[j].y1-a[i].y2);
if(a[i].time+time1+time2<a[j].time)
g[i].push_back(j);
}
}
int ans=0;
for(int i=0;i<n;i++)
{
memset(visted,0,sizeof(visted));
ans+=dfs(i);
}
printf("%d\n",n-ans);
}
return 0;
}