#include<bits/stdc++.h>
using namespace std;
int n,f[510000][21],d[510000],q,ma,tr[3100000];
vector<int>e[510000];
void dfs(int u,int fa)
{
	d[u]=d[fa]+1;
	ma=max(ma,d[u]);
	f[u][0]=fa;
	for(int i=1;i<=20;i++)f[u][i]=f[f[u][i-1]][i-1];
	for(int i=0;i<e[u].size();i++)
	{
		int v=e[u][i];
		if(v==fa)continue;
		dfs(v,u);
	}
}
int LCA(int x,int y)
{
	if(d[x]<d[y])swap(x,y);
	for(int i=20;i>=0;i--)if(d[f[x][i]]>=d[y])x=f[x][i];
	if(x==y)return x;
	for(int i=20;i>=0;i--)if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];
	return f[x][0];
}
void build(int l,int r,int p)
{
	if(l==r)
	{
		tr[p]=d[l];
		return;
	}
	int mid=(l+r)>>1;
	build(l,mid,p*2);
	build(mid+1,r,p*2+1);
	tr[p]=min(tr[p*2],tr[p*2+1]);
}
int qy(int l,int r,int p,int x,int y)
{
	if(y<l||r<x)return 1e9;
	if(x<=l&&r<=y)return tr[p];
	int mid=(l+r)>>1;
	return min(qy(l,mid,p*2,x,y),qy(mid+1,r,p*2+1,x,y));
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	for(int i=1,u,v;i<n;i++)
	{
		scanf("%d%d",&u,&v);
		e[u].push_back(v);
		e[v].push_back(u);
	}
	dfs(1,0);
	build(1,n,1);
	if(ma==n)
	{
		cin>>q;
		while(q--)
		{
			int l,r,k;
			scanf("%d%d%d",&l,&r,&k);
			printf("%d\n",qy(1,n,1,l,r));
		}
		return 0;
	}
	cin>>q;
	while(q--)
	{
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
		if(r-l+1==k)
		{
			printf("%d\n",qy(1,n,1,l,r));
			continue;
		}
		int ma=0;
		for(int i=l;i<=r-k+1;i++)
		{
			int lc=i;
			if(k==1)ma=max(ma,d[lc]);
			for(int j=i+1;j<=r;j++)
			{
				lc=LCA(lc,j);
				if(j-i+1>=k)ma=max(ma,d[lc]);
			}
		}
		printf("%d\n",ma);
	}
	return 0;
}
/*
6
5 6
6 1
6 2
2 3
2 4
3
2 5 2
1 4 1
1 6 3
*/
