#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=5010,mo=1e9+7;
int q,n,a,b,k,ans,cnt;
int h[N],d[N],f[20][N],lc[N][N],as[N][N];
struct AB{
	int x,y,n;
}l[N*2];
void in(int x,int y){
	l[++cnt].x=x,l[cnt].y=y;
	l[cnt].n=h[x];h[x]=cnt;
}
void dfs(int a,int p){
	int b;
	d[a]=d[p]+1,f[0][a]=p;
	for(int i=h[a];i;i=l[i].n){
		b=l[i].y;
		if(b==p)continue;
		dfs(b,a);
	}
}
int lca(int a,int b){
	if(d[a]<d[b])swap(a,b);
	for(int i=13;i>=0;i--){
		if(d[f[i][a]]>=d[b])a=f[i][a];
	}
	if(a==b)return a;
	for(int i=13;i>=0;i--){
		if(f[i][a]!=f[i][b])a=f[i][a],b=f[i][b];
	}
	return f[0][a];
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		scanf("%d%d",&a,&b);
		in(a,b),in(b,a);
	}
	dfs(1,0);
	for(int i=1;i<=13;i++){
		for(int j=1;j<=n;j++){
			f[i][j]=f[i-1][f[i-1][j]];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			lc[i][j]=lc[j][i]=lca(i,j);
		}
		lc[i][i]=i;
	}
	for(int i=1;i<=n;i++){
		as[i][i]=i;
		for(int j=i+1;j<=n;j++){
			as[i][j]=lc[as[i][j-1]][j];
		}
	}
	scanf("%d",&q);
	while(q--){
		scanf("%d%d%d",&a,&b,&k);
		ans=0;
		for(int i=a;i<=b;i++){
			if(i+k-1>b)break;
			ans=max(d[as[i][i+k-1]],ans);
		}
		printf("%d\n",ans);
	}
	return 0;
}
