#include <algorithm>
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
using namespace std;
const int MXN=110;
struct elist
{
	int v,last;
}e[MXN*MXN];
int zh[MXN],tote;
void adde(int u,int v)
{
	e[tote].v=v;e[tote].last=zh[u];zh[u]=tote++;
}
int q[MXN*MXN*2][3],f[2][MXN][MXN],cnt[2][MXN][MXN],cd[MXN];
int main ()
{
	int casenum=1,_,n,m,x,y,head,rear;
	scanf("%d",&_);
	while (_--)
	{
		memset(cd,0,sizeof(cd));memset(zh,-1,sizeof(zh));memset(f,0,sizeof(f));memset(cnt,0,sizeof(cnt));tote=0;
		head=rear=0;
		scanf("%d%d",&n,&m);
		while (m--)
		{
			int u,v;
			scanf("%d%d",&u,&v);
			adde(v,u);
			cd[u]++;
		}
		scanf("%d%d",&x,&y);
		for (int i=1;i<=n;i++)  if (!cd[i])
			for (int j=1;j<=n;j++)
			{
				f[0][i][j]=1;
				q[rear][0]=0;q[rear][1]=i;q[rear++][2]=j;
			}
		for (int i=1;i<=n;i++)
		{
			f[0][i][i]=f[1][i][i]=1;
			q[rear][0]=0;q[rear][1]=i;q[rear++][2]=i;
			q[rear][0]=1;q[rear][1]=i;q[rear++][2]=i;
		}
		while (head<rear)
		{
			int st=q[head][0],u[2]={q[head][1],q[head][2]};head++;
			for (int i=zh[u[!st]];i!=-1;i=e[i].last)
			{
				if (st==0&&f[1][u[0]][e[i].v]==0)
				{
					f[1][u[0]][e[i].v]=1;
					q[rear][0]=1;q[rear][1]=u[0];q[rear][2]=e[i].v;rear++;
				}
				if (st&&f[0][e[i].v][u[1]]==0)
				{
					cnt[0][e[i].v][u[1]]++;
					if (cnt[0][e[i].v][u[1]]==cd[e[i].v])
					{
						f[0][e[i].v][u[1]]=1;
						q[rear][0]=0;q[rear][1]=e[i].v;q[rear][2]=u[1];rear++;
					}
				}
			}
		}
		if (f[0][x][y])  printf("Case #%d: No\n",casenum++);
		else  printf("Case #%d: Yes\n",casenum++);
	}
	return 0;
}
