#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <queue>
#include <map>
#include <cassert>
using namespace std;
#define REP(i,n) for(int i=0; i<int(n); ++i)
#define RER(i,l,r) for(int i=l; i<=(r); ++i)
#define pb push_back
#define mp make_pair
#define X first
#define Y second
#define out(x) cerr<<#x"="<<x<<endl
typedef vector<int> vi;
typedef pair<int, int> pii;
vi E[112345];
int h[112345], sz[112345], seq[112345], anc[18][112345];
int (&fa)[112345]=anc[0];
int n, tot;
void bfs(int x){
    queue<pii> q;
    q.push(mp(x, 0));
    tot=0;
    h[0]=-1;
    while(!q.empty()){
        pii tmp=q.front();
        q.pop();
        seq[tot++]=tmp.X;
        h[tmp.X]=h[tmp.Y]+1;
        fa[tmp.X]=tmp.Y;
        vi &e=E[tmp.X];
        REP(i,e.size())if(e[i]!=tmp.Y)
            q.push(mp(e[i], tmp.X));
    }
    assert(tot==n);
    for(int i=tot-1; i>=0; --i){
        int t=seq[i];
        sz[t]=1;
        vi &e=E[t];
        REP(j,e.size())if(e[j]!=fa[t])
            sz[t]+=sz[e[j]];
    }
}
void init(){
    anc[0][1]=1;
    for(int j=1; j<18; ++j)
        for(int i=1; i<=n; ++i)
            anc[j][i]=anc[j-1][anc[j-1][i]];
}
int find_anc(int u, int v){
    if(h[u]<h[v])swap(u,v);
    //now, h[u]>=h[v]
    for(int j=17; h[u]>h[v] && j>=0; --j){
        int t=anc[j][u];
        if(h[t]>=h[v])u=t;
    }
    assert(h[u]==h[v]);
    if(u==v)return u;
    for(int j=17; j>=0; --j){
        int a=anc[j][u], b=anc[j][v];
        if(a!=b)u=a,v=b;
    }
    assert(fa[u]==fa[v]);
    return fa[u];
}
int find_anc_h(int x, int dis){
    int x0=x, dis0=dis;
    for(int i=0; dis; dis>>=1, ++i)
        if(dis&1)x=anc[i][x];
    assert(h[x0]-h[x]==dis0);
    return x;
}
int find_sep_pt(int a, int b){
    int x=find_anc(a, b);
    int h0=h[a]-h[x], h1=h[b]-h[x];
    int L=h0+h1, dis=(L+1)/2;
    if(dis>h0)return find_anc_h(b, L-dis);
    else return find_anc_h(a, dis);
}
int find_son(int a, int u){
    for(int j=17; j>=0; --j)
        if(h[anc[j][a]]>h[u])a=anc[j][a];
    assert(fa[a]==u);
    return a;
}
int minuss(int a, int u){
    int au=find_anc(a, u);
    if(au==u)return n-sz[find_son(a,u)];
    return sz[u];
}
int solve(int a, int b, int c){
    int u=find_sep_pt(a, b), v=find_sep_pt(a, c);
    int uv=find_anc(u, v), ua=find_anc(u, a), va=find_anc(v, a);
    if(ua==a && va==a){ //down, down
        if(uv==u || uv==v){
            return n-minuss(a, uv);
        } else return n-minuss(a, v)-minuss(a, u);
    } else if((ua==a)^(va==a)){ //up, down
        return n-minuss(a, u)-minuss(a, v);
    } else { //up, up
        assert(ua!=a && va!=a);
        if(ua==1 && va==1){//root, root
            if(uv==u || uv==v)return n-minuss(a, uv);
            else return n-minuss(a, u)-minuss(a, v);
        } else if(ua!=1 && va!=1){ //up, up
            int id=ua;
            if(h[va]==h[ua]){
                if(uv==u || uv==v)return n-minuss(a, uv);
                else return n-minuss(a, u)-minuss(a, v);
            }
            if(h[va]>h[id])id=va;
            if(id==u || id==v)return n-minuss(a, id);
            else return n-minuss(a, u)-minuss(a, v);
        } else {
            if(ua!=1){
                swap(u, v);
                swap(ua, va);
            }
            assert(ua==1);
            if(va==v)return n-minuss(a, v);
            else return n-minuss(a, v)-minuss(a, u);
        }
    }
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        //out(n);
        for(int i=1; i<=n; ++i)E[i].clear();
        REP(i,n-1){
            int u, v;
            scanf("%d%d",&u,&v);
            E[u].pb(v);
            E[v].pb(u);
        }
        bfs(1);
        init();
        int q;
        scanf("%d",&q);
        //out(q);
        while(q--){
            int a, b, c;
            scanf("%d%d%d",&a,&b,&c);
            assert(a!=b && b!=c && c!=a);
            printf("%d ", solve(a, b, c));
            printf("%d ", solve(b, a, c));
            printf("%d\n", solve(c, a, b));
        }
    }
}
