#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <set>
using namespace std;
const int inf = (1 << 31) - 10;
const int maxn = 10010;
int N, Q;
int root[maxn], bird[maxn];
int find(int x){
if(x == root[x]) return x;
return root[x] = find(root[x]);
}
void unite(int x, int y){
int rx = find(x);
int ry = find(y);
if(rx != ry) root[rx] = ry;
}
int main() {
//freopen("3.txt", "r", stdin);
for(int i = 1; i < maxn; i++){
root[i] = i;
}
memset(bird, 0, sizeof(bird));
scanf("%d", &N);
int K, no, num = 0, tempRoot;
for(int i = 0; i < N; i++){
scanf("%d", &K);
for(int j = 0; j < K; j++){
scanf("%d", &no);
if(!bird[no]){
num++;
bird[no] = 1;
}
if(j == 0){
tempRoot = no;
continue;
}
if(root[no] == no){
root[no] = tempRoot;
}else{
unite(tempRoot, root[no]);
}
}
}
scanf("%d", &Q);
int tree = 0, b1, b2, r;
int used[maxn];
memset(used, 0, sizeof(used));
for(int i = 1; i <= num; i++){
r = find(i);
if(used[r] == 0){
tree++;
used[r] = 1;
}
}
printf("%d %d\n", tree, num);
for(int i = 0; i < Q; i++){
scanf("%d %d", &b1, &b2);
if(find(b1) == find(b2)){
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}