#include <cstdio>
#include <queue>
using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)

int nz,nr;
int mz[10000];
int adj[10000][10];

int cur;
int res[10000];
int reach[10000];

#define ADD(x) if(reach[x]==cur-1) q[b].push(x),reach[x]=cur,res[x]=max(res[x],val+1);
void go(int s) {
	queue<int> q[2]; int a=0,b=1,val=0;
	ADD(s);
	while(!q[b].empty()) {
		swap(a,b); ++val;
		while(!q[a].empty()) {
			int at=q[a].front(); q[a].pop();
//			printf("%d: %d\n",at,val);
			REP(j,mz[at]) ADD(adj[at][j]);
		}
	}
}

void run() {
	memset(reach,-1,sizeof(reach)); memset(res,0,sizeof(res)); cur=0;
	scanf("%d%d",&nz,&nr);
	REP(i,nz) { int id; scanf("%d",&id); scanf("%d",&mz[id]); REP(j,mz[id]) scanf("%d",&adj[id][j]); }
	REP(i,nr) {
		int mr; scanf("%d",&mr);
		REP(j,mr) {
			int id; scanf("%d",&id); go(id); ++cur;
		}
	}
//	REP(i,10000) if(reach[i]==cur-1) printf("%d: %d\n",i,res[i]);
	int ret=INT_MAX,center=-1; REP(i,10000) if(reach[i]==cur-1&&res[i]<ret) ret=res[i],center=i;
	printf("%d %d\n",ret,center);
}

int main() {
	int n; scanf("%d",&n); REP(i,n) run();
	return 0;
}
