#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int n,q,dep[N],f[N][20],lc[N][20],d[N];
vector<int> g[N];
void dfs(int u,int fa)
{
	dep[u]=dep[fa]+1;
	for(int v:g[u])
	{
		if(v==fa)continue;
		f[v][0]=u;
		for(int k=1; (1<<k)<=dep[u]; k++)
			f[v][k]=f[f[v][k-1]][k-1];
		dfs(v,u);
	}
}
int LCA(int x,int y)
{
	if(dep[x]<dep[y])swap(x,y);
	for(int i=19; i>=0; i--)
		if(dep[f[x][i]]>=dep[y])x=f[x][i];
	if(x==y)return x;
	for(int i=19; i>=0; i--)
		if(f[x][i]!=f[y][i])x=f[x][i],y=f[y][i];
	return f[x][0];
}
int query(int l,int r)
{
	int k=log2(r-l+1);
	return LCA(lc[l][k],lc[r-(1<<k)+1][k]);
}
void solve1()
{
	cin>>q;
	while(q--)
	{
		int l,r,k,ans=0;
		cin>>l>>r>>k;
		for(int i=l; i+k-1<=r; i++)
		{
			int x=query(i,i+k-1);
			ans=max(ans,dep[x]);
		}
		cout<<ans<<'\n';
	}
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1; i<n; i++)
	{
		int u,v;
		cin>>u>>v;
		g[u].emplace_back(v),g[v].emplace_back(u);
		d[u]++,d[v]++;
	}
	dfs(1,0);
	int c1=0,c2=0;
	bool p=0;
	for(int i=1; i<=n; i++)
	{
		if(d[i]==1)c1++;
		if(d[i]==2)c2++;
	}
	if(c1==2&&c2==n-2)p=1;
	if(p)
	{
		solve1();
		return 0;
	}
	for(int i=1; i<=n; i++)lc[i][0]=i;
	for(int j=1; j<20; j++)
		for(int i=1; i+(1<<j)-1<=n; i++)
			lc[i][j]=LCA(lc[i][j-1],lc[i+(1<<(j-1))][j-1]);
	solve1();
	return 0;
}
