#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e4+7;
vector<int> g[MAXN];
stack<pair<int,int> > ans;
bool vis[MAXN];
bool dfs(int x,int from,int t)
{
if(vis[x]==1)
{
if(x==t)
{
int sum=0;
for(int i(0);i<g[t].size();++i)
if(!vis[g[t][i]])
{
sum++;
ans.push(make_pair(t,g[t][i]));
}
if(sum<2)
while(sum--)
ans.pop();
else
{
printf("YES\n%d\n",ans.size());
while(!ans.empty())
{
printf("%d %d\n",ans.top().first,ans.top().second);
ans.pop();
}
return 1;
}
return 0;
}
else
return 0;
}
vis[x]=1;
for(int i(0);i<g[x].size();++i)
if(g[x][i]!=from)
{
ans.push(make_pair(x,g[x][i]));
if(dfs(g[x][i],x,t))
return 1;
else
ans.pop();
}
vis[x]=0;
return 0;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
bool op=0;
int n,m;
scanf("%d%d",&n,&m);
for(int i(1);i<=n;++i)
g[i].clear(),vis[i]=0;
for(int i(1);i<=m;++i)
{
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
for(int i(1);i<=n;++i)
if(g[i].size()>=4&&dfs(i,i,i))
{
op=1;
break;
}
if(!op)
printf("NO\n");
}
return 0;
}