#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<map>
#include<vector>
#include<queue>
#include<set>
using namespace std;

int main(){
int n,m;
int a[210][210]={0};//二维数组存图
cin>>n>>m;//点数n 边数m
for(int i=0;i<m;i++){
int t1,t2;
scanf("%d%d",&t1,&t2);
a[t1][t2]=a[t2][t1]=1;
}
int cnt;//cnt次判断
cin>>cnt;
while(cnt--){
int k;
cin>>k;//给出k个点
vector<int>v(k);
set<int> s;//去重且排序
int flag1=1,flag2=1;
for(int i=0;i<k;i++){
scanf("%d",&v[i]);
s.insert(v[i]);
}

//flag1判断结点是否多走,少走,或走成环
if(s.size()!=n || k-1 !=n ||v[0]!=v[k-1]) flag1=0;//注意前两种情况

//flag2判断这条路能不能走通
for(int i=0;i<k-1;i++)
if(a[v[i]][v[i+1]] == 0) flag2=0;

printf("%s",flag1&&flag2?"YES\n":"NO\n");
}
system("pause");
return 0;
}