#include<iostream>
#include<set>
#include<vector>
using namespace std;
struct node{
int t1;
int t2;
};
int main(){
int n, m, k;
cin >> n >> m;
vector<node> v(m); // 储存所有边的信息
for(int i = 0; i < m; i++){
cin >> vi.t1 >> vi.t2;
}
cin >> k;
while(k--){
int a10009 = {0}; // 存储每个顶点的颜色
bool flag = true;
set<int> se; // 存储所有颜色
//读取每个顶点的颜色
for(int i = 0; i < n; i++){
cin >> ai;
se.insert(ai);
}
//检查每条边的两个端点颜色是否相同
for(int i = 0; i < m; i++){
if(av\[i.t1] == av\[i.t2]){
flag = false;
break;
}
}
if(flag){
cout << se.size() << "-coloring" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}