#include<bits/stdc++.h>
using namespace std;
const int N=5e3+10,M=1e4+10,P=21;
int lc[N][N],lg[N],ps[P];
int dep[N],data[N],n,o;
int ls[M],nx[M],e[M],em;
int fa[N][P];
void getp()
{
	ps[0]=1; for(int i=1;i<P;i++) ps[i]=ps[i-1]*2;
	lg[0]=-1; for(int i=1;i<n;i++) lg[i]=lg[i>>1]+1;
	return ;
}
void insert(int x,int y)
{
	e[++em]=y,nx[em]=ls[x],ls[x]=em; return ;
}
void bfs()
{
	int l=0,w=1; data[w]=1; dep[1]=0; 
	while(l<w){
		int tx=data[++l];
		for(int i=1;ps[i]<=dep[tx];i++){
			fa[tx][i]=fa[fa[tx][i-1]][i-1];
		}
		for(int i=ls[tx];i;i=nx[i]){
			if(fa[tx][0]==e[i]) continue ;
			fa[e[i]][0]=tx; data[++w]=e[i];
			dep[e[i]]=dep[tx]+1;
		}
	}
	return ;
}
int lca(int z,int w)
{
	int x=z,y=w; if(dep[x]>dep[y]) swap(x,y);
	if(dep[y]>dep[x]){
		int ss=dep[y]-dep[x],sum=0;
		while(ss){
			if(ss%2==1) y=fa[y][sum]; 
			ss>>=1; sum++;
		}
	}
	if(x==y) return x;
	for(int i=lg[dep[x]];i>=0;i--){
		if(fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];
	}
	return fa[x][0];
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n); getp();
	for(int i=1;i<n;i++){
		int x,y; scanf("%d%d",&x,&y);
		insert(x,y); insert(y,x);
	}
	bfs();
	for(int i=1;i<=n;i++){
		lc[i][i]=i;
		for(int j=i-1;j>=1;j--){
			lc[j][i]=lca(lc[j+1][i],j);
		}
	}
	scanf("%d",&o);
	while(o--){
		int l,r,k,ans=0; scanf("%d%d%d",&l,&r,&k);
		for(int i=l;i<=r-k+1;i++){
			ans=max(ans,dep[lc[i][i+k-1]]);
		}
		printf("%d\n",ans+1);
	}
	return 0;
}
