#include <bits/stdc++.h>
using namespace std;
long long int const mod = 1000000007;
long long int power(long long int x, long long int y) {
  long long int temp;
  if (y == 0) return 1;
  temp = power(x, y / 2) % mod;
  if (y % 2 == 0)
    return ((temp) * (temp)) % mod;
  else
    return (((x % mod)) * ((temp * temp) % mod)) % mod;
}
vector<long long int> g[200009];
int vis[200009];
int main() {
  long long int t;
  cin >> t;
  for (int _ = 0; _ < (int)t; _++) {
    long long int n, m;
    cin >> n >> m;
    long long int x, y;
    for (int i = 0; i < (int)m; i++) {
      cin >> x >> y;
      g[x].push_back(y);
      g[y].push_back(x);
    }
    queue<pair<long long int, long long int> > q;
    vector<long long int> vec, vec2;
    q.push({1, 1});
    int temp = 1, node;
    pair<long long int, long long int> p;
    while (!q.empty()) {
      p = q.front();
      q.pop();
      temp = p.second;
      node = p.first;
      if (vis[node]) continue;
      vis[node] = 1;
      if (temp)
        vec.push_back(node);
      else
        vec2.push_back(node);
      for (auto i : g[node]) {
        if (!vis[i]) {
          q.push({i, 1 - temp});
        }
      }
    }
    if (vec.size() < vec2.size()) {
      cout << vec.size() << "\n";
      for (auto i : vec) cout << i << " ";
      cout << "\n";
    } else {
      cout << vec2.size() << "\n";
      for (auto i : vec2) cout << i << " ";
      cout << "\n";
    }
    for (int i = 1; i <= n; i++) {
      g[i].clear();
      vis[i] = 0;
    }
    vec.clear();
    vec2.clear();
  }
}
