#include <bits/stdc++.h>
using namespace std;
const long long siz = 2 * 1e5 + 10;
const long long mod = 1e9 + 7;
const long long MAXX = 1e18;
vector<long long> graph[siz];
long long par[siz];
bool res[siz];
void init(long long n) {
  for (long long i = 1; i <= n; i++) {
    par[i] = i;
  }
}
long long get(long long n) {
  if (par[n] == n) {
    return n;
  }
  return par[n] = get(par[n]);
}
bool join(long long a, long long b) {
  long long x = get(a), y = get(b);
  if (x == y) {
    return false;
  }
  par[x] = y;
  return true;
}
void dfs(long long sta = 1, bool c = 0, long long par = 1) {
  res[sta] = c;
  for (long long i = 0; i < graph[sta].size(); i++) {
    long long v = graph[sta][i];
    if (v != par) {
      dfs(v, !c, sta);
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long t;
  cin >> t;
  while (t--) {
    long long n, m;
    cin >> n >> m;
    for (long long i = 1; i <= n; i++) {
      graph[i].clear();
    }
    init(n);
    for (long long i = 0; i < m; i++) {
      long long a, b;
      cin >> a >> b;
      if (join(a, b)) {
        graph[a].push_back(b);
        graph[b].push_back(a);
      }
    }
    dfs(1, 0, 1);
    long long a = 0;
    for (long long i = 1; i <= n; i++) {
      a += res[i];
    }
    dfs(1, 1, 1);
    long long b = 0;
    for (long long i = 1; i <= n; i++) {
      b += res[i];
    }
    if (a < b) {
      dfs(1, 0, 1);
      cout << a << '\n';
      for (long long i = 1; i <= n; i++) {
        if (res[i]) {
          cout << i << ' ';
        }
      }
      cout << '\n';
    } else {
      dfs(1, 1, 1);
      cout << b << '\n';
      for (long long i = 1; i <= n; i++) {
        if (res[i]) {
          cout << i << ' ';
        }
      }
      cout << '\n';
    }
  }
  return 0;
}
