#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <unordered_set>
#include <unordered_map>
#include <stdlib.h>

using namespace std;

#define ll long long
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define forn(i, n) for (int i = 0; i < n; i++)
#define from(i,j,n) for (int i = j; i < n; i++)

ll INF = 1e18;
ll MOD = 998244353;
vector<ll> fact(3e5 + 5, 1);
vector<ll> fenwick;

void update(int pos, ll val) { // val- what we add
  for (int i = pos; i < fenwick.size(); i = ((i - 1) | i) + 1) {
    fenwick[i] += val;
  }
}

ll sum(int pos) {
  ll result=0;
  for (int i = pos; i > 0; i = i & (i - 1))
    result += fenwick[i];
  return result;
}

ll range_sum(int l, int r) { // (l, r]
  return sum(r) - sum(l);
}

void fill_fact() {
  for (int i = 2; i < fact.size(); i++)
    fact[i] = (fact[i - 1] * i) % MOD;
}

ll pow(ll a, ll b) {
  if (b == 0) {
    return 1;
  } else if (b % 2 == 0) {
    ll x = pow(a, b / 2);
    return x * x;
  } else {
    return a * pow(a, b - 1);
  }
}

ll pow_mod(ll a, ll b) {
  if (b == 0) {
    return 1;
  } else if (b % 2 == 0) {
    ll x = pow_mod(a, b / 2) % MOD;
    return (x * x) % MOD;
  } else {
    return (a * pow_mod(a, b - 1)) % MOD;
  }
}

ll cnk(ll n, ll k) {
  ll n_fact = fact[n];
  ll k_fact = fact[k];
  ll nk_fact = fact[n - k];
  ll down = (k_fact * nk_fact) % MOD;
  ll up = pow_mod(down, MOD - 2);
  return (n_fact * up) % MOD;
}

void dfs(int v, const vector<vector<ll>>& graph, vector<ll>& color) {
  if (color[v] != -1)
    return;
  ll ones = 0;
  for (auto&& to : graph[v]) {
    if (color[to] == 1) {
      ones++;
    }
  }
  color[v] = ones ? 0 : 1;
  for (auto&& to : graph[v]) {
    dfs(to, graph, color);
  }
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int t;
  cin >> t;
  while (t--) {
    int n, m;
    cin >> n >> m;
    vector<ll> color(n, -1), answer;
    vector<vector<ll>> graph(n);
    forn(i, m) {
      int u, v;
      cin >> u >> v;
      graph[u - 1].pb(v - 1);
      graph[v - 1].pb(u - 1);
    }
    dfs(0, graph, color);
    bool flag = true;
    forn(i, n) {
      if (color[i] == -1) {
        flag = false;
      }
      if (color[i] == 1) {
        answer.pb(i);
      }      
    }
    if (!flag) {
      cout << "NO\n";
    } else {
      cout << "YES\n";
      cout << answer.size() << endl;
      forn(i, answer.size()) {
        cout << answer[i]+1 << " ";
      }
      cout << endl;
    }
    
  }
  return 0;
}
