#include<bits/stdc++.h>
using namespace std;
const int N=10010*2;
int t,n,m,id[N];
vector<int>v[N];
struct edge{
int u,v;
}e[N];
int tot,dfn[N],low[N],scc[N],cnt;
int st[N],top;
void tarjan(int x){
// cout<<x<<"*"<<endl;
dfn[x]=low[x]=++tot;
st[++top]=x;
for(int i=0,y;i<v[x].size();i++){
y=v[x][i];
if(dfn[y]==0)tarjan(y),low[x]=min(low[x],low[y]);
else if(scc[y]==0)low[x]=min(low[x],low[y]);
}
if(low[x]==dfn[x]){
cnt++;
for(int y=0;y!=x;){
scc[y=st[top--]]=cnt;
}
}
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>t;
while(t--){
memset(low,0,sizeof low);
memset(dfn,0,sizeof dfn);
memset(scc,0,sizeof scc);
tot=0,cnt=0;
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>e[i].u>>e[i].v;
}
for(int i=1,a;i<=n;i++){
cin>>a;
id[a]=i;
}
for(int i=1;i<=m;i++){
e[i].u=id[e[i].u];
e[i].v=id[e[i].v];
if(e[i].u>e[i].v)swap(e[i].u,e[i].v);
}
if(m>n*3-6){////////这样子只有90分
cout<<"NO"<<endl;
continue;
}//如果改成 m>1000 就能100分???
return 0;
}
离谱问题之m>3n-6过不了第八个点(+6也过不了》)