#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
const long long mod = 1e9 + 7;
template <typename T>
inline T gcd(T a, T b) {
  return !b ? a : gcd(b, a % b);
}
template <typename T>
inline T q_pow(T a, T x) {
  T ans = 1, tmp = a;
  while (x) {
    if (x & 1) (ans *= tmp) %= mod;
    (tmp *= tmp) %= mod;
    x >>= 1;
  }
  return ans;
}
template <typename T>
inline void re(T &N) {
  int f = 1;
  char c;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') f = -1;
  N = c - '0';
  while ((c = getchar()) >= '0' && c <= '9') N = N * 10 + c - '0';
  N *= f;
}
int m, n, t = 1, st, en;
struct edge {
  int to, nxt;
  edge(int to = 0, int nxt = 0) : to(to), nxt(nxt) {}
} e[N << 1];
int head[N];
inline void add(int x, int y) {
  e[++t] = edge(y, head[x]);
  head[x] = t;
  e[++t] = edge(x, head[y]);
  head[y] = t;
}
int s[N], ma[N];
void dfs1(int x, int p) {
  s[x] = 1;
  ma[x] = 0;
  for (int i = head[x]; i; i = e[i].nxt) {
    int to = e[i].to;
    if (to == p) continue;
    dfs1(to, x);
    ma[x] = max(ma[x], s[to]);
    s[x] += s[to];
  }
  ma[x] = max(ma[x], n - s[x]);
}
int main() {
  int _;
  re(_);
  while (_--) {
    t = 1;
    re(n);
    for (int i = 1; i <= n; i++) head[i] = 0;
    for (int i = 1; i < n; i++) {
      int x, y;
      re(x);
      re(y);
      add(x, y);
    }
    dfs1(1, 0);
    pair<int, int> now;
    int mi = 1e9;
    for (int i = 1; i <= n; i++) mi = min(mi, ma[i]);
    for (int i = 1; i <= n; i++)
      if (ma[i] == mi) {
        if (!now.first)
          now.first = i;
        else
          now.second = i;
      }
    if (!now.second) {
      printf("%d %d\n", e[2].to, e[3].to);
      printf("%d %d\n", e[2].to, e[3].to);
    } else {
      dfs1(now.second, 0);
      int ma = 0, pos;
      for (int i = head[now.second]; i; i = e[i].nxt) {
        int to = e[i].to;
        if (to == now.first) continue;
        if (ma < s[to]) ma = s[to], pos = to;
      }
      printf("%d %d\n", now.second, pos);
      printf("%d %d\n", now.first, pos);
    }
  }
}
