//哈密顿环路,能够沿边形成一个覆盖所有点的环路,中间点不重复。判断:1、k=n+1 2、数组首尾相同才能形成环路 3、每个点出现1次 4、必须有边才能走
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int MAX=210;
int G[MAX][MAX]={0};
int judge(vector<int> vn){
int vis[MAX]={0};
int i;
if(vn[0]!=vn[vn.size()-1]) return 0;//not a cycle
for(i=1;i<vn.size();i++){
if(G[vn[i-1]][vn[i]]==1){//if has an edge
vis[vn[i]]++;
if(vis[vn[i]]>1) return 0;
}else return 0;//not a edge
}
return 1;
}
int main(){
int n,m,i;
scanf("%d%d",&n,&m);
int v1,v2;
for(i=0;i<m;i++){
scanf("%d%d",&v1,&v2);
G[v1][v2]=G[v2][v1]=1;
}
int k,temp,query;
scanf("%d",&query);
for(i=0;i<query;i++){
scanf("%d",&k);
vector<int> vn;
for(int j=0;j<k;j++){
scanf("%d",&temp);
vn.push_back(temp);
}
if(k==(n+1)){
if(judge(vn)==1) printf("YES\n");
else printf("NO\n");
}else printf("NO\n");
}
system("pause");
return 0;
}