#include <bits/stdc++.h>

const int N = 200200;

using namespace std;

int n;
vector < int > v[N];

int ask(int x)
{
        int y;
        printf("1 %d\n", x);
        fflush(stdout);
        scanf("%d", &y);
        return y;
}

int s[N];
bool dead[N];

void dfs(int x, int p = -1)
{
        s[x] = 1;
        for(int y: v[x]){
                if(y == p || dead[y]){
                        continue;
                }
                dfs(y, x);
                s[x] += s[y];
        }
}

int get_centroid(int x, int sz, int p = -1)
{
        int mx = sz - s[x];
        for(int y: v[x]){
                if(y == p || dead[y]) {
                        continue;
                }
                int g = get_centroid(y, sz, x);
                if(g != -1){
                        return g;
                }
                mx = max(mx, s[y]);
        }
        if(mx <= sz / 2){
                return x;
        }
        return -1;
}

int get(int x)
{
        dfs(x);
        x = get_centroid(x, s[x]);
        dead[x] = true;
        dfs(x);

        int y = ask(x);
        assert(!dead[y]);
        if(y == -1){
                return x;
        } else{
                return get(y);
        }
}

void solve()
{
        scanf("%d", &n);
        for(int i = 1; i <= n; i++){
                v[i].clear();
                dead[i] = 0;
        }
        for(int i = 1; i < n; i++){
                int x, y;
                scanf("%d%d", &x, &y);
                v[x].push_back(y);
                v[y].push_back(x);
        }

        int res = get(1);

        printf("2 %d\n", res);
        fflush(stdout);
        scanf("%d", &res);
}

int main()
{
        //freopen("Btree.txt", "r", stdin);
        //freopen("output.txt", "w", stdout);
        ios_base::sync_with_stdio(0);

        int T;
        scanf("%d", &T);
        while(T--){
                solve();
        }
}