#include<bits/stdc++.h>
using namespace std;
int n,q,head[500005],cs[500005],rmq[500005][30],f[2000005],st,ans;
inline int read()
{
	int x=0;char c=getchar();bool f=0;
	for(;!isdigit(c);c=getchar()) f=!(c^45);
	for(;isdigit(c);c=getchar()) x=(x<<1)+(x<<3)+(c^48);
	return (f?-x:x);
}
struct pp
{
	int to,nxt;
}dl[1000005];
struct pp1
{
	int l,r,k;
}que[500005];
void dfs(int x)
{
	int o=0;
	while(rmq[x][o]!=0)
	{
		rmq[x][o+1]=rmq[rmq[x][o]][o];
		o++;
	}
	for(int i=head[x];i;i=dl[i].nxt)
	{
		if(cs[dl[i].to]==0)
		{
			cs[dl[i].to]=cs[x]+1;
			rmq[dl[i].to][0]=x;
			dfs(dl[i].to);
		}
	}
}
inline int LCA(int a,int b)
{
	if(cs[a]<cs[b]) swap(a,b);
	for(int i=19;i>=0;--i)
		if(cs[rmq[a][i]]>=cs[b]) a=rmq[a][i];
	if(a==b) return a;
	for(int i=19;i>=0;--i)
		if(rmq[a][i]!=rmq[b][i])
		{
			a=rmq[a][i];
			b=rmq[b][i];
		}
	return rmq[a][0];
}
void build(int l,int r,int rt)
{
	if(l==r)
	{
		f[rt]=l;
		return ;
	}
	build(l,(l+r)/2,rt*2);
	build((l+r)/2+1,r,rt*2+1);
	f[rt]=LCA(f[rt*2],f[rt*2+1]);
}
int srch(int l,int r,int rt,int ll,int rr)
{
	if(ll<=l&&r<=rr) return f[rt];
	int sum=0,ss;
	if((l+r)/2>=ll)
	{
		sum=srch(l,(l+r)/2,rt*2,ll,rr);
	}
	if((l+r)/2+1<=rr)
	{
		ss=srch((l+r)/2+1,r,rt*2+1,ll,rr);
		if(sum!=0) sum=LCA(sum,ss);
		else sum=ss;
	}
	return sum;
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	n=read();
	for(int i=1;i<n;i++)
	{
		dl[i*2-1].to=read();
		dl[i*2].to=read();
		dl[i*2-1].nxt=head[dl[i*2].to];
		dl[i*2].nxt=head[dl[i*2-1].to];
		head[dl[i*2].to]=i*2-1;
		head[dl[i*2-1].to]=i*2;
	}
	cs[1]=1;
	rmq[1][0]=0;
	dfs(1);
	build(1,n,1);
	q=read();
	ans=1;
	for(int i=1;i<=q;i++)
	{
		que[i].l=read();
		que[i].r=read();
		que[i].k=read();
		ans=1;
		for(int j=que[i].l;j<=que[i].r-que[i].k+1;j++)
		{
			ans=max(ans,cs[srch(1,n,1,j,j+que[i].k-1)]);
		}
		printf("%d\n",ans);
	}
}
