#include<bits/stdc++.h>
using namespace std;
const int M=5e5+5;
int n,u,v,q,l,r,k,cnt,nxt[M],hd[M],to[M],p[20],la[5005][5005],dep[M],stk[5005][5005],tp[5005],nw,st[M][20];
void lian(int x,int y){
	nxt[++cnt]=hd[x];
	hd[x]=cnt;
	to[cnt]=y;
	nxt[++cnt]=hd[y];
	hd[y]=cnt;
	to[cnt]=x;
}
void ya(int x,int fa,int id){
//	cout<<"ya"<<x<<' '<<fa<<' '<<id<<endl;
	stk[id][++tp[id]]=x;
	for(int i=hd[x];i;i=nxt[i]){
		if(to[i]==fa)continue;
		ya(to[i],x,id);
	}
}
void chu(int x,int fa,int id){
	for(int i=1;i<=tp[id];++i)la[stk[id][i]][x]=la[x][stk[id][i]]=id;
	for(int i=hd[x];i;i=nxt[i]){
		if(to[i]==fa)continue;
		chu(to[i],x,id);
	}
}
void dfs(int x,int fa){
//	cout<<"DFS"<<x<<' '<<fa<<endl;
	for(int i=hd[x];i;i=nxt[i]){
		if(to[i]==fa)continue;
		dep[to[i]]=dep[x]+1;
		dfs(to[i],x);
		chu(to[i],x,x);
		ya(to[i],x,x);
	}
	for(int i=1;i<=tp[x];++i)la[stk[x][i]][x]=la[x][stk[x][i]]=x;
	la[x][x]=x;
}
void dfs1(int x,int fa){
	for(int i=hd[x];i;i=nxt[i]){
		if(to[i]==fa)continue;
		dep[to[i]]=dep[x]+1;
		dfs(to[i],x);
	}
} 
int stt(int x,int y){
	int lg=__lg(y);
//	cout<<"stt"<<lg<<' '<<x<<' '<<y<<' '<<la[st[x][lg]][st[y-p[lg]+1][lg]]<<endl;
	return dep[la[st[x][lg]][st[x+y-p[lg]][lg]]];
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	p[0]=1,dep[1]=1;
	for(int i=1;i<=19;++i)p[i]=p[i-1]*2;
	for(int i=1;i<n;++i){
		scanf("%d%d",&u,&v);
		lian(u,v);
	}
	if(n<=5005){	
		dfs(1,0);
		for(int i=1;i<=n;++i)st[i][0]=i;
		for(int i=1;i<=19;++i){
			for(int j=1;j+p[i]-1<=n;++j){
				st[j][i]=la[st[j][i-1]][st[j+p[i-1]][i-1]];
			}
		}
		scanf("%d",&q);
		for(int i=1;i<=q;++i){
			int ans=0;
			scanf("%d%d%d",&l,&r,&k);
			for(int j=l;j<=r-k+1;++j){
				ans=max(ans,stt(j,k));
			}
			printf("%d\n",ans);
		}
	}
	return 0;
}
/*
6
5 6
6 1
6 2
2 3
2 4
3
2 5 2
1 4 1
1 6 3
*/

