#include <bits/stdc++.h>
using namespace std;
int p[2005],v[2005],f;
int fin(int x)
{
if(x==p[x])
return p[x];
int tmp=fin(p[x]);
v[x]^=v[p[x]];
p[x]=tmp;
return p[x];
}
void join(int x,int y)
{
int fx=fin(x);
int fy=fin(y);
if(fx!=fy)
{
p[fx]=fy;
if(v[y]==0)
v[fx]=1-v[x];
else
v[fx]=v[x];
}
else
{
if(v[x]==v[y])f=0;
}
}
int main()
{
int T,n,m,a,b;
scanf("%d",&T);
for(int ii=1;ii<=T;ii++)
{
f=1;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
p[i]=i;
v[i]=0;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
if(f)join(a,b);
}
printf("Scenario #%d:\n",ii);
if(f)printf("No suspicious bugs found!\n");
else printf("Suspicious bugs found!\n");
printf("\n");
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1000000+5;
struct Edge {
int v,nxt;
} edge[maxn<<1];
int tot,head[maxn],vis[maxn];
void addedge(int u,int v) {
edge[tot]= {v,head[u]};
head[u]=tot++;
edge[tot]= {u,head[v]};
head[v]=tot++;
}
int n,f;
void dfs(int u,int tp) {
vis[u]=tp;
for(int i=head[u]; i!=-1; i=edge[i].nxt) {
int v=edge[i].v;
if(vis[v]==-1) {
dfs(v,tp^1);
if(f==0)return;
} else {
if(vis[v]==tp) {
f=0;
break;
}
}
}
return;
}
int main() {
int t;
scanf("%d",&t);
int cas=1;
while(t--) {
memset(head,-1,sizeof head);
tot=0;
int m,x,y;
scanf("%d %d",&n,&m);
for(int i=0; i<m; i++) {
scanf("%d%d",&x,&y);
addedge(x,y);
}
f=1;
memset(vis,-1,sizeof vis);
for(int i=1; i<=n; i++) {
if(vis[i]==-1) {
dfs(i,0);
if(f==0)break;
}
}
printf("Scenario #%d:\n",cas++);
if(f) {
printf("No suspicious bugs found!\n");
} else {
printf("Suspicious bugs found!\n");
}
printf("\n");
}
return 0;
}