#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=5009;
const int M=13;
int tot,to[N],nx[N],st[N];
int deep[N],ans[N][M],n,lca[N],Lca[N][N],q;
void add(int u,int v)
{
	tot++;
	to[tot]=v;
	nx[tot]=st[u];
	st[u]=tot;
}
void dg(int x,int fa)
{
	deep[x]=deep[fa]+1;
	ans[x][0]=fa;
	for(int i=1;i<M;i++)
		ans[x][i]=ans[ans[x][i-1]][i-1];
	for(int i=st[x];i;i=nx[i])
	{
		int v=to[i];
		if(v!=fa) dg(v,x);
	}
}
int find(int u,int v)
{
	if(deep[u]<deep[v]) swap(u,v);
	int h=deep[u]-deep[v];
	for(int i=0;i<M;i++)
		if(h&(1<<i))
			u=ans[u][i];
	if(u==v) return u;
	for(int i=M-1;i>=0;i--)
		if(ans[u][i]!=ans[v][i])
			u=ans[u][i],v=ans[v][i];
	return ans[u][0];
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<n;i++)
	{
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v),add(v,u);
	}
	dg(1,1);
	for(int i=1;i<n;i++)
	{
		lca[i]=deep[find(i,i+1)];
	}
	for(int i=1;i<=n;i++)
	{
		Lca[i][i]=deep[i];
		for(int j=i+1;j<=n;j++)
			Lca[i][j]=min(Lca[i][j-1],lca[j-1]);
	}
	scanf("%d",&q);
	while(q--)
	{
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
		int u=0;
		for(int i=l;i<=r-k+1;i++)
			u=max(u,Lca[i][i+k-1]);
		printf("%d\n",u);
	}
	return 0;
}

