/*************************
题意:
与PAT1114类似,都是图的连接问题,求有几个连通图,以及2个点是否同属于一个连通图

************************/
/***********************
解题思路:
用dfs遍历即可, 注意遍历时,给每个点附上一个father赋值,便于确定是否在同一连通图上
*************************/
/***********************

*********************/
#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<queue>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<stack>
#include<map>
#include<set>
#include<unordered_map>
using namespace std;
#define M 10005
#define INF 0x7ffffff

vector<int> nextNode[M];

int flag[M];
int root;
int father[M];
int birdn = 0;
void dfs(int node){

flag[node] = 2;
birdn ++;
father[node] = root;

int i, e;
for(i=0;i<nextNode[node].size();i++){
e = nextNode[node][i];
if(flag[e] == 1)
dfs(e);
}
}

int main(){
int n, i, m ,k,j,node;
cin>>n;
memset(flag, 0,sizeof(flag));
while(n--){
cin>>m;
if(m != 0){
cin>>node;
flag[node] = 1;
m--;
}
while(m--){
cin>>k;
flag[k] = 1;
nextNode[node].push_back(k);
nextNode[k].push_back(node);
}
}

int treen = 0;
for(i=0;i<M;i++){
if(flag[i] == 1){
treen++;
root = i;
dfs(i);
}
}
printf("%d %d\n", treen, birdn);
cin>>n;
int a,b;
while(n--){
cin>>a>>b;
if(father[a] == father[b]){
cout<<"Yes"<<endl;
}
else cout<<"No"<<endl;
}


return 0;
}