#include <cstdio>
#include <cstring>
#include <queue>
#define inf 0x3fffffff
#define maxn 1005
using namespace std;
struct Edge
{
int v, w, next;
}edge[10005];
int head[maxn], tot, dis[maxn], n;
bool vis[maxn];
void init()
{
tot = 0;
memset(head, -1, sizeof(head));
}
void addEdge(int u, int v, int w)
{
edge[tot].v = v;
edge[tot].w = w;
edge[tot].next = head[u];
head[u] = tot++;
}
void SPFA(int u)
{
int v, w, i;
for(i = 1; i <= n; i++)
dis[i] = inf, vis[i] = false;
dis[u] = 0;
queue<int> q;
q.push (u);
vis[u] = true;
while(!q.empty())
{
u = q.front();
q.pop();
vis[u] = false;
for(i = head[u]; i != -1; i = edge[i].next)
{
w = edge[i].w;
v = edge[i].v;
if (dis[u] + w < dis[v])
{
dis[v] = dis[u] + w;
if (!vis[v])
{
q.push (v);
vis[v] = true;
}
}
}
}
}
int main()
{
int T,m,t=1;
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &n, &m);
init();
for(int i=0; i<m; i++)
{
int u,v;
scanf("%d%d", &u,&v);
addEdge(u,v,1);
addEdge(v,u,1);
}
for(int i=1; i<=n; i++)
{
int v;
scanf("%d", &v);
if(v != -1) addEdge(i,v,0);
}
SPFA(1);
if(dis[n] != inf)
printf("Case #%d: %d\n",t++, dis[n]);
else printf("Case #%d: -1\n",t++);
}
}