#include <stdio.h>
struct node{
int x;
int num;
};
node queue[1000];
int head,tail,len,len1,flag,k,flag2;
int visit[1000],map[1000][1000];
int cun[10000];
void en(node E)
{
queue[head++]=E;
}
node qe()
{
return queue[tail++];
}
void fu()
{
for(int i=0;i<=len;i++)
{
visit[i]=0;
for(int j=0;j<=len;j++)
map[i][j]=0;
}
}
void bfs()
{
head=0;
tail=0;
len1=0;
flag=0;
flag2=0;
node source={1,0};
en(source);
node cur={};
node ns={};
while(tail<head)
{
cur=qe();
len1++;
if(flag==1)
break;
for(int i=1;i<=len;i++)
{
if(map[cur.x][i]==1)
{
if(visit[i])
{
visit[i]=cur.x;
flag2=i;
flag=1;
break;
}
else
{
ns.x=i;
visit[ns.x]=cur.x;
en(ns);
if(ns.x<cur.x)
{
flag2=ns.x;
flag=1;
break;
}
}
}
}
}
}
int main()
{
freopen("in.txt","r",stdin);
int n,m,m1,m2;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d %d",&len,&m);
fu();
for(int j=0;j<m;j++)
{
scanf("%d %d",&m1,&m2);
map[m1][m2]=1;
}
bfs();
if(flag)
{
int k=flag2;
while(1)
{
printf("%d ",visit[k]);
k=visit[k];
if(visit[k]==flag2)
break;
}
printf("%d ",flag2);
}
else
printf("NO\n");
}
}
2
6 6
1 2
1 3
2 4
4 6
3 5
6 1
6 5
1 2
1 3
2 4
3 5
5 6