//#pragma GCC target ("avx2")
//#pragma GCC optimization ("O3")
//#pragma GCC optimization ("unroll-loops")
#include<bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//using namespace __gnu_pbds;
#define eps 1e-8
#define eq(x,y) (fabs((x)-(y)) < eps)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int,int>pii;
const ll mod= 998244353;
long double PI = acosl(-1);
const ll infl = 1e17+100;
const int inf = 1e9+100;
const int nmax = 3e5+5;
//const int MAXLG = log2(nmax)+1;
//mt19937 rng(chrono::system_clock::now().time_since_epoch().count());
//typedef tree< int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ost;

bool vis[nmax];
vector<int>g[nmax];

void dfs(int u){
    vis[u] = true;
    for(int v : g[u]) if(!vis[v])
        dfs(v);
}


int main(){

    ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

    int tc;
    cin>>tc;
    while(tc--){
        int n,m;
        cin>>n>>m;
        for(int i=0; i<m; i++){
            int u,v;
            cin>>u>>v;
            g[u].push_back(v);
            g[v].push_back(u);
        }
        bool hoise = false;
        bool unposibol = false;
        for(int i=1; i<=n; i++){
            if(!vis[i]){
                if(!hoise){
                    dfs(i);
                    hoise = true;
                }
                else unposibol = true;
            }
        }
        if(unposibol) cout<<"NO\n";
        else{
            cout<<"YES\n";
            for(int i=1; i<=n; i++) vis[i] = false;
            vector<int>ans;
            set<int>st; st.insert(1);
            while(st.size()){
                int u = *st.begin();
                st.erase(u);
                if(vis[u]) continue;
                vis[u] = true;
                ans.push_back(u);
                vector<int>tmp;
                for(int v : g[u]) if(!vis[v]){
                    vis[v] = true;
                    tmp.push_back(v);
                }
                for(int v : tmp){
                    for(int z : g[v]) if(!vis[z]){
                        st.insert(z);
                    }
                }
            }
            cout<<ans.size()<<"\n";
            for(int x : ans) cout<<x<<" ";
            cout<<"\n";
        }
        for(int i=1; i<=n; i++) vis[i] = false, g[i].clear();
    }


}
/*

*/
