#include <bits/stdc++.h>   using namespace std;   const double EPS = 1e-8;   const long long mod = (int)1e9 + 7;   int dx[] = {0, 0, -1, 1, 1, 1, -1, -1};   int dy[] = {1, -1, 0, 0, 1, -1, -1, 1};   const int N = 1000001;   void stop() {}   void file() {}   struct point {     long long x, y;   };   unsigned long long gcd(unsigned long long a, unsigned long long b) {     return !b ? a : gcd(b, a % b);   }   long long fixMod(long long a, long long b) { return ((a % b) + b) % b; }   double triangle_area(int x1, int y1, int x2, int y2, int x3, int y3) {     return abs((x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1)) / 2.;   };   long long dis(pair<long long, long long> a, pair<long long, long long> b) {     long long x = a.first - b.first, y = a.second - b.second;     return abs(x) + abs(y);   }   unsigned long long LCM(unsigned long long a, unsigned long long b) {     return a / gcd(a, b) * b;   }   long long power(long long x, long long y) {     if (y == 0) return 1;     if (y == 1) return x;     long long r = power(x, y / 2);     return r * r * power(x, y % 2);   }   bool isPrime(long long x) {     if (x <= 1 || (x % 2 == 0 && x != 2)) return 0;     for (long long i = 3; i * i <= x; i += 2) {       if (x % i == 0) return 0;     }     return 1;   }   vector<vector<int>> v;   int n;   vector<int> dep;   int dfs(int node, int pr = -1) {     int ret = 1;     for (auto ch : v[node]) {       if (ch != pr) {         ret += dfs(ch, node);       }     }     dep[node] = ret;     return ret;   }   int aa = -1, bb = -1;   int x = -1;   void sol(int node, int pr = -1) {     if (v[node].size() == 1 && aa == -1) {       aa = node;       bb = pr;     }     for (auto ch : v[node]) {       if (ch != pr && ch != x) {         sol(ch, node);       }     }   }   void solve() {     cin >> n;     v.clear();     v.resize(n);     dep.clear();     map<pair<int, int>, bool> mp;     int mx = 0;     int st = 0;     dep.resize(n);     for (int i = 0; i < n - 1; i++) {       int a, b;       cin >> a >> b;       a--;       b--;       mp[{a, b}] = true;       v[a].push_back(b);       v[b].push_back(a);     }     for (int i = 0; i < n; i++) {       if (v[i].size() > mx) {         mx = v[i].size();         st = i;       }     }     int ans = dfs(st);     if (count(((dep).begin()), ((dep).end()), ans / 2) == 0 || ans & 1) {       for (auto i : mp) {         cout << i.first.first + 1 <<     << i.first.second + 1 <<   n ;         cout << i.first.first + 1 <<     << i.first.second + 1 <<   n ;         break;       }     } else {       aa = -1;       bb = -1;       x = -1;       for (int i = 0; i < n; i++) {         if (dep[i] * 2 == ans) {           x = i;           break;         }       }       sol(st);       if (mp[{aa, bb}] == true) {         cout << aa + 1 <<     << bb + 1 <<   n ;       } else {         cout << bb + 1 <<     << aa + 1 <<   n ;       }       if (v[aa].size() == 1) {         cout << x + 1 <<     << aa + 1 <<   n ;       } else {         cout << x + 1 <<     << bb + 1 <<   n ;       }     }     mp.clear();   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     int t = 1;     cin >> t;     while (t--) {       solve();     }     return 0;   }