#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;

int n,q;
int d[500010];
int v[5010][5010];
int maxn[5010][5010];
int hd[500010],tot;

struct abc{
	int to,nxt;
}b[500010];

void add(int x,int y)
{
	b[++tot]=(abc){y,hd[x]};
	hd[x]=tot;
}

void dfs(int x,int dep,int fa)
{
	d[x]=dep;
	v[x][x]=1;
	for(int i=hd[x];i;i=b[i].nxt)
	{
		int y=b[i].to;
		if(y==fa) continue;
		dfs(b[i].to,dep+1,x);
	}
	int l=0,flg=0;
	for(int i=1;i<=n;i++)
	{
		if(v[x][i]&&!flg)
			l=i,flg=1;
		if(!v[x][i]&&flg)
			maxn[l][i-1]=max(maxn[l][i-1],dep),flg=0;
		v[fa][i]|=v[x][i];
	}
}

int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	for(int i=1;i<n;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		add(x,y),add(y,x);
	}
	dfs(1,1,0);
	cin>>q;
	while(q--)
	{
		int l,r,k,ans=0;
		scanf("%d%d%d",&l,&r,&k);
		for(int len=k;len<=n;len++)
			for(int i=l;i+len-1<=r;i++)
				ans=max(ans,maxn[i][i+len-1]);
		printf("%d\n",ans);
	}
}
