#include<cstdio>
#include<vector>
#include<algorithm>
#define TY int
#define MAXN 500002
#define MAXM 10000000
#define FOR(i,a,b) for(TY i=(a);i<=(b);i=-~i)
#define fOR(i,a,b) for(TY i=(a);i<(b);i=-~i)
#define ROF(i,a,b) for(TY i=(a);i>=(b);i=~-i)
#define rOF(i,a,b) for(TY i=(a);i>(b);i=~-i)
#define EDG(i,u) for(TY i=hed[u];i;i=nxt[i])
using namespace std;
typedef long long ll;
const TY B=710;
TY _abs(TY a){return a<0?-a:a;}
TY maxn(TY a,TY b){return a>b?a:b;}
TY minn(TY a,TY b){return a<b?a:b;}
void updmx(TY &a,TY b){if(a<b)a=b;}
void updmn(TY &a,TY b){if(a>b)a=b;}
TY qr(){
TY x=1,s=0;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')x=-1;
for(;ch>='0'&&ch<='9';ch=getchar())s=s*10+ch-'0';return x*s;
}void qw(TY a){if(a>9)qw(a/10);putchar(a%10+'0');}
void qw(TY a,char ch){
if(a<0){a=-a;putchar('-');}
if(a>9)qw(a/10);putchar(a%10+'0');if(ch)putchar(ch);
}TY n,q,u,v,hed[MAXN],nxt[MAXN<<1],to[MAXN<<1],F[MAXN],sn[MAXN],dep[MAXN],ar[MAXN],mx[MAXN],m;
TY l[MAXN],r[MAXN],k[MAXN],ans[MAXN],fa[MAXN],sz[MAXN],id[MAXN],ct,L,R;
struct node{TY l,r,v;}A[MAXM];vector<TY>que[MAXN],vec[MAXN];
bool cmp(TY x,TY y){return ar[x]>ar[y];}
void addedge(TY id){nxt[id]=hed[u];to[hed[u]=id]=v;}
TY getfa(TY u){return fa[u]!=u?fa[u]=getfa(fa[u]):u;}
void chg(TY x,TY d){updmx(ar[x],d);updmx(mx[x/B],d);}
TY ask(TY l,TY r){
TY s=0;while(l<=r&&l%B)updmx(s,ar[l++]);
while(l<=r&&r%B!=B-1)updmx(s,ar[r--]);
if(l<=r)FOR(i,l/B,r/B)updmx(s,mx[i]);return s;
}void dfs(TY u){
sz[u]=1;EDG(i,u)if(to[i]!=F[u]){
dep[to[i]]=dep[F[to[i]]=u]+1;
dfs(to[i]);sz[u]+=sz[to[i]];
if(sz[sn[u]]<sz[to[i]])sn[u]=to[i];
}
}void dfs2(TY u){
ar[id[++ct]=u]=ar[F[u]];
EDG(i,u)if(to[i]!=F[u])dfs2(to[i]);
}int main(){
freopen("query.in","r",stdin);
freopen("query.out","w",stdout);
n=qr();fOR(i,1,n){
u=qr();v=qr();addedge(i<<1);
u^=v^=u^=v;addedge(i<<1|1);
}dfs(dep[1]=1);
FOR(i,1,n)sz[fa[i]=i]=0;
FOR(x,1,n)if(sn[F[x]]!=x){
ct=0;for(TY u=x;u;u=sn[u]){
ar[id[++ct]=u]=dep[u];
EDG(i,u)if(to[i]!=F[u]&&to[i]!=sn[u])dfs2(to[i]);
}sort(id+1,id+ct+1,cmp);
FOR(i,1,ct){
sz[u=L=R=id[i]]=1;
if(sz[u-1]){
L-=sz[v=getfa(u-1)];
fa[v]=u;sz[u]+=sz[v];
}if(sz[u+1]){
R+=sz[v=getfa(u+1)];
fa[v]=u;sz[u]+=sz[v];
}A[++m]=(node){.l=L,.r=R,.v=ar[u]};
}FOR(i,1,ct){
ar[id[i]]=sz[id[i]]=0;fa[id[i]]=id[i];
}
}FOR(i,1,m)vec[A[i].l].push_back(i);
q=qr();FOR(i,1,q){
l[i]=qr();r[i]=qr();k[i]=qr()-1;
que[l[i]].push_back(i);
}FOR(i,1,n){
fOR(j,0,vec[i].size())chg(A[vec[i][j]].r,A[vec[i][j]].v);
fOR(j,0,que[i].size())ans[que[i][j]]=ask(l[que[i][j]]+k[que[i][j]],n);
}FOR(i,1,n){vec[i].clear();que[i].clear();}
FOR(i,1,m)vec[A[i].r-A[i].l].push_back(i);
FOR(i,1,q){que[k[i]].push_back(i);r[i]-=k[i];}
FOR(i,1,n)ar[i]=mx[i]=0;
ROF(i,n-1,0){
fOR(j,0,vec[i].size())chg(A[vec[i][j]].l,A[vec[i][j]].v);
fOR(j,0,que[i].size())updmx(ans[que[i][j]],ask(l[que[i][j]],r[que[i][j]]));
}FOR(i,1,q)qw(ans[i],'\n');return 0;
}