Solution:
//顶点着色
#include<iostream>
#include<vector>
#include<map>
using namespace std;
struct node{
int color;
vector<int> edge;
};
int n,m;
vector<node> vec;
int k;
bool flag=true;
void traversal(){//遍历
for(int i=0;i<n;i++){
int color=vec[i].color;
for(int j=0;j<vec[i].edge.size();j++){
if(color==vec[vec[i].edge[j]].color){
flag=false;
return;
}
}
}
}
int main(){
cin>>n>>m;
vec.resize(n);
int a,b;
for(int i=0;i<m;i++){
cin>>a>>b;
vec[a].edge.push_back(b);
vec[b].edge.push_back(a);
}
cin>>k;
for(int i=0;i<k;i++){
map<int,int> mp;
int ans=0;
for(int j=0;j<n;j++){
cin>>vec[j].color;
if(mp[vec[j].color]==0){
mp[vec[j].color]=1;
ans++;
}
}
flag=true;
traversal();
if(flag){
cout<<ans<<"-coloring";
}else{
cout<<"No";
}
if(i!=k-1){
cout<<endl;
}
}
return 0;
}