#include<bits/stdc++.h> 
using namespace std; 
 
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL);
#define lli long long int
#define ld long double
#define pb push_back
#define pf push_front
#define mp make_pair
#define mt make_tuple
#define all(x) (x).begin(),(x).end()
#define pll pair<lli,lli>
#define ve vector<lli>
#define vep vector<pair<lli,lli> >
#define fr(i,a,n) for(lli i=a;i<(n);i++)
#define frx(i,a,n) for(lli i=a;i>(n);i--)
#define lb lower_bound
#define ub upper_bound
#define F first
#define S second
#define db(x) cout << "[ " << x << " ]" << endl
#define db2(x,y) cout<<"[ " <<x<<" "<<y<< " ]" <<endl
#define parr(arr,a,n) fr(i,a,n) cout<<arr[i]<<" "; cout<<endl
#define mem(a,x) memset(a,x,sizeof(a));
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl

void dfs(lli root,ve adj[],ve &vis,ve &col){
    vis[root]=1;
    if(!col[root]){
        col[root]=1;
        for(auto nei:adj[root]){
            if(!col[nei])col[nei]=-1;
        }
    }
    for(auto nei:adj[root]){
        if(!vis[nei])dfs(nei,adj,vis,col);
    }
}

void solve(){
    lli n,m;
    cin>>n>>m;
    ve vis(n+1,0),col(n+1,0);
    ve adj[n+1];
    fr(i,0,m){
        lli u,v;
        cin>>u>>v;
        adj[v].pb(u);
        adj[u].pb(v);
    }
    dfs(1,adj,vis,col);
    ve ans;
    fr(i,1,n+1){
        if(!vis[i]){
            no;
            return;
        }
        if(col[i]==1)ans.pb(i);
    }
    yes;
    lli sz=ans.size();
    cout<<sz<<endl;
    parr(ans,0,sz);
}

int main(){
    fast;
    lli t=1;
    cin>>t;
    while(t--){
        solve();
    }
}