#include <iostream>
#include <vector>
using namespace std;
int flag[10010], sum[10010], tree[10010];
vector<int> v;
void init(int id)
{
tree[id] = -1;
sum[id] = 1;
flag[id] = 1;
v.push_back(id);
}
int findroot(int root)
{
if(tree[root] == -1)
{
return root;
}
else
{
tree[root] = findroot(tree[root]);
return tree[root];
}
}
void buildrelation(int index[2])
{
int i;
for(i = 0; i <= 1; i++)
{
if(flag[index[i]] == 0)
{
init(index[i]);
}
else
{
index[i] = findroot(index[i]);
}
}
if(index[0] == index[1])
{
return;
}
int index0 = index[0], index1 = index[1];
if(sum[index1] > sum[index0])
{
index0 = index[1];
index1 = index[0];
}
tree[index1] = index0;
sum[index0] += sum[index1];
}
int getrootcount()
{
int i, size = v.size(), count = 0;
for(i = 0; i < size; i++)
{
if(tree[v[i]] == -1)
{
count++;
}
}
return count;
}
int main()
{
int n;
scanf("%d", &n);
int i, k, first, j, next, index[2];
for(i = 1; i <= n; i++)
{
scanf("%d%d", &k, &first);
index[0] = first;
for(j = 1; j < k; j++)
{
scanf("%d", &next);
index[1] = next;
buildrelation(index);
}
if(k == 1)
{
init(first);
}
}
printf("%d %d\n", getrootcount(), v.size());
int q;
scanf("%d", &q);
int a, b;
for(i = 1; i <= q; i++)
{
scanf("%d%d", &a, &b);
a = findroot(a);
b = findroot(b);
if(a == b)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
system("pause");
return 0;
}