#include<bits/stdc++.h>
using namespace std;
#define fo(a,b,c) for(int a=b;a<=c;a++)
#define go(a,b,c) for(int a=b;a>=c;a--)
typedef long long ll;
typedef pair<int,int> pii;
const int MAX=5e5+5;
int n,m,dep[MAX],fa[MAX],top[MAX],siz[MAX],hson[MAX];
vector<vector<int>>ed;
void dfs1(int u)
{
	siz[u]=1;
	for(auto v:ed[u])
	{
		if(v==fa[u])
			continue;
		fa[v]=u;
		dep[v]=dep[u]+1;
		dfs1(v);
		siz[u]+=siz[v];
		if(siz[v]>siz[hson[u]])
			hson[u]=v;
	}
}
void dfs2(int u,int topf)
{
	top[u]=topf;
	if(!hson[u])
		return;
	dfs2(hson[u],topf);
	for(auto v:ed[u])
	{
		if(v==hson[u])
			continue;
		if(v==fa[u])
			continue;
		dfs2(v,v);
	}
}
int get(int u,int v)
{
	if(u==v)
		return u;
	if(dep[top[u]]<dep[top[v]])
		swap(u,v);
	while(top[u]!=top[v])
	{
		u=fa[top[u]];
		if(dep[top[u]]<dep[top[v]])
		swap(u,v);
	}
	if(dep[u]<dep[v])
		swap(u,v);
	return v;
}
void solve()
{
//	cin>>n;
//	cout<<n<<m;
//	ed.resize(n+1);
	fo(i,1,n-1)
	{
		int u,v;
		cin>>u>>v;
//		cout<<u<<v;
		ed[u].push_back(v);
		ed[v].push_back(u);
	}
	dep[1]=1;
	dfs1(1);
	dfs2(1,1);
	cin>>m;
	fo(i,1,m)
	{
		int l,r,k;
		cin>>l>>r>>k;
		int md=1;
//		cout<<l<<r<<k;
		fo(j,l,r-k+1)
		{
			int pos=j;
//			cout<<"/"<<j<<endl;
			fo(t,j+1,j+k-1)
			{
//				cout<<"#"<<pos<<' '<<t<<endl;
				pos=get(pos,t);
				if(dep[pos]<md)
					break;
			}
			md=max(dep[pos],md);
		}
		cout<<md<<'\n';
	}
//	ed.clear();
}
int main()
{
	ios::sync_with_stdio(false);
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	int t=1;
	cin>>n;
	ed.resize(n+1);
	while(t--)
		solve();
}
