#include <bits/stdc++.h>
using namespace std;
const int N=5*1e5+10;
inline int read()
{
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-48;c=getchar();}
	return x*f;
}
struct node{
	int to,nxt;
}e[N<<1];
int n,q,h[N],cnt;
int fa[N],dep[N],siz[N],top[N],hson[N];
void add(int u,int v)
{
	e[++cnt].to=v;
	e[cnt].nxt=h[u];
	h[u]=cnt;
}
void dfs1(int u,int f)
{
	dep[u]=dep[f]+1,siz[u]=1,fa[u]=f;
	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[v]>siz[hson[u]])hson[u]=v;
	}
}
void dfs2(int u,int p)
{
	top[u]=p;
	if(hson[u])dfs2(hson[u],p);
	for(int i=h[u];i;i=e[i].nxt)
	{
		int v=e[i].to;
		if(v==fa[u]||v==hson[u])continue;
		dfs2(v,v);
	}
}
int lca(int x,int y)
{
	while(top[x]!=top[y])
	{
		if(dep[top[x]]<dep[top[y]])swap(x,y);
		x=fa[top[x]];
	}
	if(dep[x]<dep[y])return x;
	else return y;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	n=read();
	for(int i=1;i<n;i++)
	{
		int u=read(),v=read();
		add(u,v),add(v,u);
	}
	dfs1(1,0);
	dfs2(1,1);
	q=read();
	while(q--)
	{
		int l=read(),r=read(),k=read(),ans=-1e9;
		for(int i=l;i<=r-k+1;i++)
		{
			int t=i;
			if(k==1)ans=max(ans,dep[t]);
			for(int j=i+1;j<=i+k-1;j++)
			{
				t=lca(t,j);
				if(j>=i+k-1)ans=max(ans,dep[t]);
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}
