#include <bits/stdc++.h>
using namespace std;
const int N=5*1e5+5;
int n,q,cnt,ans;
int h[N],du[N],fa[N],dep[N],siz[N],son[N],top[N];
struct node
{
	int nxt,to;
}e[N*2];
void add(int u,int v)
{
	e[++cnt].nxt=h[u];
	e[cnt].to=v;
	h[u]=cnt;
}
void dfs1(int u,int f)
{
	fa[u]=f;
	siz[u]=1;
	dep[u]=dep[f]+1;
	for(int i=h[u];i;i=e[i].nxt)
	{
		int v=e[i].to;
		if(v==f)
		{
			continue;
		}
		dfs1(v,u);
		siz[u]+=siz[v];
		if(siz[son[u]]<siz[v])
		{
			son[u]=v;
		}
	}
}
void dfs2(int u,int t)
{
	top[u]=t;
	if(son[u]==0)
	{
		return;
	}
	dfs2(son[u],t);
	for(int i=h[u];i;i=e[i].nxt)
	{
		int v=e[i].to;
		if(v==fa[u]||v==son[u])
		{
			continue;
		}
		dfs2(v,v);
	}
}
int query(int u,int v)
{
	while(top[u]!=top[v])
	{
		if(dep[top[u]]<dep[top[v]])
		{
			swap(u,v);
		}
		u=fa[top[u]];
	}
	if(dep[u]<dep[v])
	{
		return u;
	}
	return v;
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n-1;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v);
		add(v,u);
	}
	dfs1(1,0);
	dfs2(1,1);
	scanf("%d",&q);
	int maxn=0;
	for(int i=1;i<=n;i++)
	{
		maxn=max(maxn,dep[n]);
	}
	if(dep[n]==n)
	{
		while(q--)
		{
			int l,r,k,lca;
			scanf("%d%d%d",&l,&r,&k);
			printf("%d\n",dep[l]);
		}
		return 0;
	}
	while(q--)
	{
		int l,r,k,lca;
		ans=1;
		scanf("%d%d%d",&l,&r,&k);
		for(int i=l;i<=r;i++)
		{
			lca=i;
			if(i+k-1>r)
			{
				break;
			}
			for(int j=i;j<=i+k-1;j++)
			{
				lca=query(lca,j);
			}
			ans=max(ans,dep[lca]);
		}
		printf("%d\n",ans);
	}
	return 0;
}
