部落
#include <iostream>
#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
#define INF 0x3f3f3f3f;
const int N=10010;
int par[N];
int ranks[N];
int peo[N];
int inde[N];
int num;
void init()
{
for(int i=1;i<=N;i++)
{par[i]=i;ranks[i]=0;}
}
int find(int x)
{
if(par[x]==x)return x;
else return par[x]=find(par[x]);
}
int same(int x,int y)
{
return find(x)==find(y);
}
void unit(int x,int y)
{
x=find(x);
y=find(y);
if(find(x)==find(y))return;
if(ranks[x]<ranks[y])
par[x]=y;
else
{
par[y]=x;
if(ranks[x]==ranks[y])
ranks[x]++;
}
}
int main()
{
int n;
scanf("%d",&n);
int m=n;
init();
memset(inde,-1,sizeof inde);
while(m--)
{
int k;
scanf("%d",&k);
for(int i=1;i<=k;i++)
scanf("%d",&peo[i]),inde[peo[i]]++;
for(int i=1;i<k;i++)
unit(peo[i],peo[i+1]);
}
for(int i=1;i<N;i++)
if(inde[i]!=-1)num++;
set<int> s;
for(int i=1;i<=num;i++)
{
s.insert(find(i));
}
printf("%d %d\n",num,s.size());
int Q;
scanf("%d",&Q);
while(Q--)
{
int x,y;
scanf("%d%d",&x,&y);
if(same(x,y))
printf("Y\n");
else printf("N\n");
}
return 0;
}