import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
solution1(in);
// solution2(in);
}
}
/**
* 模拟法: Map
* @param in
*/
private static void solution1(Scanner in){
int cases = in.nextInt();
while(cases-- > 0){
int frames = in.nextInt();
HashMap<String, Integer> lastMap = new HashMap<>();
HashMap<String, Integer> currMap;
int num = in.nextInt();
while(num-- > 0){
lastMap.put(new Identity(in.nextInt(), in.nextInt()).toString(), 1);
}
int tmp;
int max = 1;
for(int i=2; i<=frames; i++){
currMap = new HashMap<>();
num = in.nextInt();
Identity identity;
while(num-- > 0){
identity = new Identity(in.nextInt(), in.nextInt());
if(lastMap.containsKey(identity.toString())){
tmp = lastMap.get(identity.toString()) + 1;
max = Math.max(max, tmp);
currMap.put(identity.toString(), tmp);
}else{
currMap.put(identity.toString(), 1);
}
}
lastMap = currMap;
}
System.out.println(max);
}
}
/**
* 模拟法: List
* @param in
*/
private static void solution2(Scanner in){
int cases = in.nextInt();
while(cases-- > 0){
List<Identity> identityList = new ArrayList<>();
int frames = in.nextInt();
for(int i=1; i<=frames; i++){
int num = in.nextInt();
while(num-- > 0){
identityList.add(new Identity(i, in.nextInt(), in.nextInt()));
}
}
identityList.sort((o1, o2) -> {
if(o1.x != o2.x){
return o1.x - o2.x;
}else{
return o1.y - o2.y;
}
});
int size = identityList.size();
int tmp = 1;
int max = 1;
for(int i=1; i<size; i++){
if(identityList.get(i).equals(identityList.get(i-1))){
tmp++;
max = Math.max(max, tmp);
}else{
tmp = 1;
}
}
System.out.println(max);
}
}
private static class Identity{
int frameId;
int x;
int y;
public Identity(int frameId, int x, int y){
this.frameId = frameId;
this.x = x;
this.y = y;
}
public Identity(int x, int y){
this.x = x;
this.y = y;
}
@Override
public String toString(){
return x+","+y;
}
@Override
public boolean equals(Object o){
if(this == o){
return true;
}
if(o == null || getClass() != o.getClass()){
return false;
}
Identity identity = (Identity) o;
return frameId == identity.frameId+1 && x == identity.x && y == identity.y;
}
}
}