
1 #include<iostream>
2 #include<stdio.h>
3 #include<cstring>
4 #include<cstdlib>
5 #include<algorithm>
6 #include<vector>
7 #include<queue>
8 using namespace std;
9
10 vector<int>Q[100002];
11 int num[100002];
12 int vis[100002];
13 bool use[100002];
14 queue<int>H;
15
16 void add(int x,int y)
17 {
18 num[x]++;
19 Q[x].push_back(y);
20 }
21 bool bfs(int start)
22 {
23 int i,cur,now,x;
24 H.push(start);
25 use[start]=true;
26 vis[start]=0;
27 while( !H.empty() )
28 {
29 x=H.front();
30 H.pop();
31 cur=vis[x];
32 if(cur==0) cur=1;
33 else if(cur==1) cur=0;
34
35 for(i=0;i<num[x];i++)
36 {
37 now=Q[x][i];
38 if(use[now]==true)
39 {
40 if( (vis[now]==1&&cur==0 ) || ( vis[now]==0 && cur==1 ))
41 {// 我很奇怪,为什么if( vis[now]!=cur)就错了,
42 //照理说,我的vis[now]的值已经被修改过的,不是-1.
43 return true;
44 }
45 continue;
46 }
47 vis[now]=cur;
48 use[now]=true;
49 H.push(now);
50 }
51 }
52 return false;
53 }
54 int main()
55 {
56 int T,n,m,s,t;
57 int i,x,y;
58 scanf("%d",&T);
59 for(t=1;t<=T;t++)
60 {
61 scanf("%d%d%d",&n,&m,&s);
62 memset(num,0,sizeof(num));
63 memset(vis,-1,sizeof(vis));
64 memset(use,false,sizeof(use));
65 for(i=0;i<=n;i++)
66 Q[i].clear();
67 for(i=1;i<=m;i++)
68 {
69 scanf("%d%d",&x,&y);
70 add(x,y);
71 add(y,x);
72 }
73 printf("Case %d: ",t);
74 if( bfs(s) ==true)
75 printf("YES\n");
76 else printf("NO\n");
77 }
78 return 0;
79 }
