/*
分析:
Tarjan。
判断俩图形状是否一样,这个图比较简单,只有链和环,所以很
容易判断的,1Y、每次看到1Y都会很happy的有木有~!。
2013-06-15
*/
#include"iostream"
#include"cstdio"
#include"stack"
#include"cstring"
#include"algorithm"
using namespace std;
const int N=10005;
int n[2],m[2],cnt_line[2],cnt_cir[2],cnt_line_node[2][N],cnt_cir_node[2][N];
int LOW[N],DFN[N],instack[N],index_s,indegree[2][N];
struct Edge{
int v,next;
}edge[2][2*N];
int tot[2],head[2][N];
void add(int k,int a,int b){
edge[k][tot[k]].v=b;edge[k][tot[k]].next=head[k][a];head[k][a]=tot[k]++;
edge[k][tot[k]].v=a;edge[k][tot[k]].next=head[k][b];head[k][b]=tot[k]++;
}
void build_map(int k)
{
int a,b;
tot[k]=0;
memset(head[k],-1,sizeof(head[k]));
memset(indegree[k],0,sizeof(indegree[k]));
scanf("%d%d",&n[k],&m[k]);
while(m[k]--)
{
scanf("%d%d",&a,&b);
add(k,a,b);
indegree[k][a]++;
indegree[k][b]++;
}
}
stack<int>st;
void Tarjan(int k,int s)
{
int j,v;
st.push(s);
instack[s]=1;
DFN[s]=LOW[s]=++index_s;
for(j=head[k][s];j!=-1;j=edge[k][j].next)
{
v=edge[k][j].v;
if(instack[v]) LOW[s]=LOW[s]>DFN[v]?DFN[v]:LOW[s];
else if(DFN[v]==-1)
{
Tarjan(k,v);
LOW[s]=LOW[s]>LOW[v]?LOW[v]:LOW[s];
}
}
if(LOW[s]==DFN[s])
{
int cnt_node=0;
int cnt_degree=0;
do
{
j=st.top();
st.pop();
cnt_node++;
cnt_degree+=indegree[k][j];
}while(j!=s);
if(cnt_node*2==cnt_degree)
cnt_cir_node[k][cnt_cir[k]++]=cnt_node;
else
cnt_line_node[k][cnt_line[k]++]=cnt_node;
}
}
void solve(int k)
{
int i;
cnt_line[k]=cnt_cir[k]=0;
index_s=0;
memset(LOW,-1,sizeof(LOW));
memset(DFN,-1,sizeof(DFN));
memset(instack,0,sizeof(instack));
for(i=0;i<n[k];i++) if(LOW[i]==-1) Tarjan(k,i);
}
int main()
{
int T,Case;
int i;
int ans;
cin>>T;
for(Case=1;Case<=T;Case++)
{
build_map(0);
build_map(1);
solve(0);
solve(1);
ans=0;
if(cnt_line[0]!=cnt_line[1] || cnt_cir[0]!=cnt_cir[1]) ans=1;
if(ans) {printf("Case #%d: NO\n",Case);continue;}
sort(cnt_line_node[0],cnt_line_node[0]+cnt_line[0]);
sort(cnt_line_node[1],cnt_line_node[1]+cnt_line[1]);
for(i=0;i<cnt_line[0];i++) if(cnt_line_node[0][i]!=cnt_line_node[1][i]) {ans=1;break;}
if(ans) {printf("Case #%d: NO\n",Case);continue;}
sort(cnt_cir_node[0],cnt_cir_node[0]+cnt_cir[0]);
sort(cnt_cir_node[1],cnt_cir_node[1]+cnt_cir[1]);
for(i=0;i<cnt_cir[0];i++) if(cnt_cir_node[0][i]!=cnt_cir_node[1][i]) {ans=1;break;}
if(ans) printf("Case #%d: NO\n",Case);
else printf("Case #%d: YES\n",Case);
}
return 0;
}