#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<algorithm>
const int maxn=3e5+10;
struct edge
{
    int to,nxt;
} e[2*maxn];
int h[maxn],edgecnt;
void addedge(int u,int v)
{
    e[++edgecnt].to=v;
    e[edgecnt].nxt=h[u];
    h[u]=edgecnt;
}
int T,n,m,tot,chos;
int clr[maxn];
std::vector <int> vec;
std::queue <int> q;
void bfs()
{
    vec.clear();
    tot=0;chos=0;
    for(int i=1;i<=n;i++) clr[i]=0;
    clr[1]=1;
    q.push(1);
    while(!q.empty())
    {
        tot++;
        int u=q.front();
        q.pop();
        for(int i=h[u];i;i=e[i].nxt)
        {
            int v=e[i].to;
            if(!clr[v]) q.push(v);
            if(clr[u]==1) clr[v]=2;
            else if(!clr[v]) clr[v]=1;
        }
    }
}
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        edgecnt=0;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++) h[i]=0;
        for(int i=1;i<=m;i++)
        {
            int ui,vi;
            scanf("%d%d",&ui,&vi);
            addedge(ui,vi);
            addedge(vi,ui);
        }
        bfs();
        if(tot!=n)
        {
            printf("NO\n");
        } else
        {
            printf("YES\n");
            for(int i=1;i<=n;i++)
            {
                if(clr[i]==1) chos++;
            }
            printf("%d\n",chos);
            for(int i=1;i<=n;i++)
            {
                if(clr[i]==1) printf(i==n ? "%d" : "%d ",i);
            }
            printf("\n");
        }
    }
}
