#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int a[maxn],st[20][maxn],fat[maxn],top[maxn],dep[maxn],son[maxn],siz[maxn],dfn[maxn],tot;
int n,q,T;
vector<int> G[maxn];
void predfs(int u,int fa)
{
	//cout<<u<<'\n';
	dfn[u]=++tot;
	siz[u]=1,son[u]=0;
	dep[u]=dep[fa]+1;
	for(int v:G[u])
		if(v!=fa)
		{
			//cout<<u<<' '<<v<<' '<<fa<<'\n';
			fat[v]=u;
			predfs(v,u);
			if(siz[v]>siz[son[u]])son[u]=v;
			siz[u]+=siz[v];
		}
}
void topdfs(int u,int topf)
{
	top[u]=topf;
	if(!son[u])return;
	topdfs(son[u],topf);
	for(int v:G[u])
		if(v!=fat[u]&&v!=son[u])
			topdfs(v,v);
}
int getlca(int u,int v)
{
	while(top[u]!=top[v])
	{
		if(dep[top[u]]<dep[top[v]])swap(u,v);
		u=fat[top[u]];
	}
	if(dep[u]>dep[v])swap(u,v);
	return u;
}
bool flag;
int qry(int l,int r)
{
	int s=__lg(r-l+1);
	return getlca(st[s][l],st[s][r-(1<<s)+1]);
}
namespace sub1{
	void done()
	{
		for(int i=1;i<=q;i++)
		{
			int l,r,k;
			cin>>l>>r>>k;
			int Ans=0;
			for(int i=l;i<=r-k+1;i++)
				Ans=max(Ans,dep[qry(i,i+k-1)]);
			cout<<Ans<<'\n';
		}
	}
}
namespace sub2{
	void did()
	{
		for(int i=1;i<=q;i++)
		{
			int l,r,k;
			cin>>l>>r>>k;
			cout<<dep[qry(l,r)]<<'\n';
		}
	}
}
void solve()
{
	cin>>n;
	flag=0;
	for(int i=1;i<=n;i++)G[i].clear(),siz[i]=0,fat[i]=0,dfn[i]=0,dep[i]=0;
	tot=0;
	for(int i=1;i<n;i++)
	{
		int u,v;
		cin>>u>>v;
		G[u].push_back(v);
		G[v].push_back(u);
	}
	predfs(1,0);
	topdfs(1,1);
	flag=1;
	for(int i=1;i<=n;i++)
		flag&=(top[i]==1);
	for(int i=1;i<=n;i++)
		st[0][i]=i;
	for(int j=1;(1<<j)<=n;j++)
		for(int i=1;i+(1<<j)-1<=n;i++)
		{
			
			st[j][i]=getlca(st[j-1][i],st[j-1][i+(1<<j-1)]);
			//cout<<i<<' '<<i+(1<<j)-1<<' '<<st[j][i]<<'\n';
		}
	cin>>q;
	if(flag)sub2::did();
	else sub1::done();
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0);
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	T=1;
	while(T--)solve();
}
