#include<bits/stdc++.h>
using namespace std;
const int N=5000;
int n,q;
int tot;
int head[N+10],dep[N+10];
int f[N+10] [25],Num[N+10] [N+10];
struct Node{
	int to,next;
}E[N*2+10];
void add(int u,int v){
	E[++tot]=Node{v,head[u]};
	head[u]=tot;
}
void dfs(int now,int father){
	dep[now]=dep[father]+1;
	f[now] [0]=father;
	for(int i=1;i<=20;i++)
		f[now] [i]=f[f[now] [i-1]] [i-1];
	for(int i=head[now];i;i=E[i].next){
		int son=E[i].to;
		if(son==father)
			continue;
		dfs(son,now);
	}
}
int LCA(int x,int y){
	if(dep[x]<dep[y])
		swap(x,y);
	for(int i=20;i>=0;i--)
		if(dep[f[x] [i]]>=dep[y])
			x=f[x] [i];
	if(x==y)
		return x;
	for(int i=20;i>=0;i--)
		if(f[x] [i]!=f[y] [i])
			x=f[x] [i],y=f[y] [i];
	return f[x] [0];
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v);
		add(v,u);
	}
	dfs(1,0);
	for(int i=1;i<=n;i++){
		Num[i] [i]=i;
		for(int j=i+1;j<=n;j++)
			Num[i] [j]=LCA(Num[i] [j-1],j);
	}
	scanf("%d",&q);
	while(q--){
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
		int ans=0;
		for(int i=l;i+k-1<=r;i++)
			ans=max(ans,dep[Num[i] [i+k-1]]);
		printf("%d\n",ans);
	}
	return 0;
}

