#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=500005;
vector<int> E[N];
int n,q,dep[N],fa[N][21],st[N][21],LOG2[N];
void dfs(int p,int fat)
{
	dep[p]=dep[fat]+1;
	fa[p][0]=fat;
	for(int i=1;(1<<i)<=dep[p];i++)
		fa[p][i]=fa[fa[p][i-1]][i-1];
	for(int i:E[p])if(i!=fat)dfs(i,p);
}
int lca(int x,int y)
{
	if(dep[x]<dep[y])swap(x,y);
	for(int i=20;i>=0;i--)
		if(dep[x]-(1<<i)>=dep[y])x=fa[x][i];
	if(x==y)return x;
	for(int i=20;i>=0;i--)
		if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
	return fa[x][0];
}
void st_init()
{
	int i,j;
	for(i=1;i<=n;i++)st[i][0]=i;
	for(j=1;j<=20;j++)
		for(i=1;i+(1<<j)-1<=n;i++)
			st[i][j]=lca(st[i][j-1],st[i+(1<<(j-1))][j-1]);
}
void log_init()
{
	LOG2[1]=0;
	for(int i=2;i<=n;i++)LOG2[i]=LOG2[i/2]+1;
}
inline int st_query(int l,int r)
{
	if(l==r)return l;
	int d=r-l+1;
	int t=LOG2[d];
	//printf("l=%d r=%d d=%d t=%d rl=%d lcal=%d lcar=%d\n",l,r,d,t,r-(1<<t)+1,st[l][t],st[r-(1<<t)+1][t]);
	return lca(st[l][t],st[r-(1<<t)+1][t]);
}
int main()
{
	int i,u,v,l,r;
	int k;
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	log_init();
	for(i=1;i<n;i++)
	{
		scanf("%d%d",&u,&v);
		E[u].push_back(v);
		E[v].push_back(u);
	}
	dfs(1,0);
	st_init();
	cin>>q;
	while(q--)
	{
		scanf("%d%d%d",&l,&r,&k);
		
		//printf("%d\n",st[l][r]);
		//printf("dep:%d\n",dep[l]);
		int ans=0;
		for(i=l;i+k-1<=r;i++)
		{
			ans=max(ans,dep[st_query(i,i+k-1)]);
		}
		printf("%d\n",ans);
				
			
	}
	return 0;
}
