#include <bits/stdc++.h>
using namespace std;
class Init {
 public:
  Init() noexcept try {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
  } catch (...) {
    cerr << "Init constructor threw an exception" << endl;
    terminate();
  }
} init_ __attribute__((unused));
using ll = long long;
using ld = long double;
using pi = pair<int, int>;
using pl = pair<ll, ll>;
using ti = tuple<int, int, int>;
using tl = tuple<ll, ll, ll>;
using tii = tuple<int, int, int, int>;
using tll = tuple<ll, ll, ll, ll>;
using vi = vector<int>;
using vl = vector<ll>;
using vpi = vector<pi>;
using vpl = vector<pl>;
using vti = vector<ti>;
using vtl = vector<tl>;
using vtii = vector<tii>;
using vtll = vector<tll>;
using vvi = vector<vi>;
using vvl = vector<vl>;
template <typename T>
istream &operator>>(istream &in, vector<T> &v);
template <typename U, typename V>
istream &operator>>(istream &in, pair<U, V> &p);
template <typename T>
ostream &operator<<(ostream &out, const vector<T> &v);
template <typename U, typename V>
ostream &operator<<(ostream &out, const pair<U, V> &p);
template <typename T>
istream &operator>>(istream &in, vector<T> &v) {
  for (T &i : v) in >> i;
  return in;
}
template <typename U, typename V>
istream &operator>>(istream &in, pair<U, V> &p) {
  return in >> p.first >> p.second;
}
template <typename T>
ostream &operator<<(ostream &out, const vector<T> &v) {
  auto it = v.begin();
  if (!v.empty()) out << *it++;
  while (it != v.end()) out << " " << *it++;
  return out;
}
template <typename U, typename V>
ostream &operator<<(ostream &out, const pair<U, V> &p) {
  return out << p.first << " " << p.second;
}
template <class T, class F>
void map_vec(vector<T> &v, F f) {
  for (auto &i : v) {
    i = f(i);
  }
}
template <class T, class U, class F>
U reduce(const vector<T> &v, U init, F f) {
  U res = init;
  for (auto &i : v) {
    res = f(res, i);
  }
  return res;
}
vvi g;
vi cen;
int n;
int dfs(int x, int p) {
  int c = 1;
  int flag = 1;
  for (int i : g[x]) {
    if (i != p) {
      int t = dfs(i, x);
      if (t > n / 2) flag = 0;
      c += t;
    }
  }
  int t = n - c;
  if (t > n / 2) flag = 0;
  if (flag) cen.emplace_back(x);
  return c;
}
int main() {
  int tt_;
  cin >> tt_;
  for (int ttt_ = 1; ttt_ <= tt_; ttt_++) {
    cin >> n;
    g.clear();
    cen.clear();
    g.resize(n + 1);
    for (int i = 1; i < n; i++) {
      int a, b;
      cin >> a >> b;
      g[a].emplace_back(b);
      g[b].emplace_back(a);
    }
    dfs(1, 1);
    if (cen.size() == 1) {
      cout << 1 << " " << g[1][0] << "\n" << 1 << " " << g[1][0] << "\n";
    } else {
      int t;
      if (g[cen[0]].size() == 1) swap(cen[0], cen[1]);
      for (int i : g[cen[0]]) {
        if (i != cen[1]) {
          t = i;
          break;
        }
      }
      cout << cen[0] << " " << t << "\n";
      cout << cen[1] << " " << t << "\n";
    }
  }
}
