#include<bits/stdc++.h>
using namespace std;
long long n,dep[500005],head[500005],to[1000005],nxt[1000005],cnt,q,l,r,k,f[100005][22],lg,anss[5005][5005];
void add(long long u,long long v)
{
	nxt[++cnt]=head[u];
	head[u]=cnt;
	to[cnt]=v;
}
void dfs(long long o,long long fa)
{
	for(int i=head[o];i;i=nxt[i])
	{
		if(to[i]==fa) continue;
		f[to[i]][0]=o;
		dep[to[i]]=dep[o]+1;
		dfs(to[i],o);
	}
}
long long lca(long long x,long long y)
{
	if(dep[x]<dep[y]) swap(x,y);
	for(int i=lg;i>=0;i--)
	{
		if(dep[f[x][i]]>=dep[y])
		{
			x=f[x][i];
		}
	}
	if(x==y) return x;
	for(int i=lg;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("%lld",&n);
	long long u,v;
	for(int i=1;i<n;i++) scanf("%lld%lld",&u,&v),add(u,v),add(v,u);
	f[1][0]=1;
	dep[1]=1;
	dfs(1,0);
	lg=log2(n);
	for(int j=1;j<=lg;j++)
	{
		for(int i=1;i<=n;i++)
		{
			f[i][j]=f[f[i][j-1]][j-1];
		}
	}
	for(int i=1;i<=n;i++)
	{
		long long lcaa=i;
		anss[i][i]=dep[lcaa];
		for(int j=i+1;j<=n;j++)
		{
			lcaa=lca(lcaa,j);
			anss[i][j]=dep[lcaa];
		}
	}
	scanf("%lld",&q);
	while(q--)
	{
		long long ans=0;
		scanf("%lld%lld%lld",&l,&r,&k);
		for(int i=l;i<=r-k+1;i++)
		{
			ans=max(ans,anss[i][i+k-1]);
		}
		printf("%lld\n",ans);
	}
	return 0;
}
