#include <iostream>
#include <vector>
#include <string>
#include <array>
#include <functional>
#include <algorithm>
#include <stack>
#include <map>
#include <set>
#include <climits>
#include <queue>
#include <bitset>
#include <cassert>
#include <math.h>
#include <complex>
#include <iomanip>
#include <unordered_map>
using namespace std;
#define ll long long
#define pb(x) push_back(x)
#ifdef _OLIMPOLOCAL
    #define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#else
    #define debug(...) 1337
#endif
void debug_out() { cout << "\n";}
template<typename T1, typename... T2> void debug_out(T1 A, T2... B) { cout << " " << A; debug_out(B...); }
int test = 1;
#define out(x) {cout << x << "\n";return;}
template<typename T1> 
void print(vector<T1> V, int add = 0, int start = -1, int end = -1) {
    if (start < 0) start = 0;
    if (end < 0) end = V.size() - 1;
    for (int i = start; i <= end; i++) {
        cout << V[i] + add << ((i == end) ? "\n" : " ");
    }
}
template<typename T1> 
T1 chmin(T1 &x, const T1 v) { return x = min(x,v); }
template<typename T1> 
T1 chmax(T1 &x, const T1 v) { return x = max(x,v); }
#define rep(i, n) for (int i = 0; i < n; i++)
//-------------------------- ^ DONT TOUCH ^-----------------------------------------------------------------
#define MOD 998244353ll
#define MAX 300001

int n, m, x ,y;
vector<int> G[MAX];
int S[MAX];
void solve() {
    cin >> n >> m;
    rep(i,n) { G[i].clear(); S[i] = -1; }
    rep(i,m) {
        cin >> x >> y;
        x--; y--;
        G[x].push_back(y);
        G[y].push_back(x);
    }
    queue<pair<int, int>> Q;
    Q.push({0,0});
    int nn = 0;
    int s = 0;
    vector<int>A;
    int g = -1;
    S[0] = 0;
    vector<int> O;
    while (Q.size() > 0) {
        nn++;
        auto q = Q.front(); Q.pop();
        O.push_back(q.first);
        for(int i = 0 ; i < G[q.first].size(); i++) {
            g = G[q.first][i];
            if (S[g] == -1) {
                S[g] = q.second + 1;
                Q.push({g, q.second + 1});
            }
        }
    }
    if (nn != n) out("NO")
    rep(i,n) { S[i] = -1; }
    rep(o,n) {
        int i = O[o];
        if (S[i] == -1) A.push_back(i);
        else continue;
        S[i] = 1;
        for(int j = 0 ; j < G[i].size(); j++) {
            S[G[i][j]] = 1;
        }
    }

    
    cout << "YES" << endl;
    cout << A.size() << endl;
    print(A, 1);
    
}

int main(int argc, const char * argv[]) {
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin >> test;
    for (int testCount = 1; testCount <= test; testCount++)
    {
        #ifdef _OLIMPOLOCAL
            cout << "---------------Test case " << testCount << "---------------"<< endl;
        #endif
        solve();
    }
    
    return 0;
}