#include<bits/stdc++.h> 
using namespace std;
const int MAXN=1e4+10;
int n,q;
int fat[100100][30];
int dep[100100],lc[MAXN][MAXN],X,Y,ql,qr,qk,ans;
vector<int> v[100100];
void dfs(int x,int fa,int deep)
{
	dep[x]=deep;
	fat[x][0]=fa;
	for(int i=1;i<=20;i++)
		fat[x][i]=fat[fat[x][i-1]][i-1];
	for(int i=0;i<v[x].size();i++)
	{
		if(v[x][i]!=fa)
			dfs(v[x][i],x,deep+1);
	}
}
int lca(int x,int y)
{
	if(dep[x]<dep[y]) swap(x,y);
	for(int i=20;i>=0;i--)
	{
		if(dep[fat[x][i]]>=dep[y]) x=fat[x][i];
	}
	if(x==y) return y;
	for(int i=20;i>=0;i--)
	{
		if(fat[x][i]!=fat[y][i]) x=fat[x][i],y=fat[y][i];
	}
	return fat[x][0];
}
int tr[400010];
void build(int l,int r,int x)
{
	if(l==r)
	{
		tr[x]=dep[l];
		return ;
	}
	int mid=l+r>>1;
	build(l,mid,x*2);
	build(mid+1,r,x*2+1);
	tr[x]=max(tr[x*2],tr[x*2+1]);
}
int query(int dl,int dr,int l,int r,int x)
{
	if(l<=dl&&dr<=r) return tr[x];
	int mid=l+r>>1;
	int tmp1=0,tmp2=0;
	if(dl<=mid) tmp2=query(dl,dr,l,mid,x*2);
	if(mid<dr) tmp1=query(dl,dr,mid+1,r,x*2+1);
	return max(tmp1,tmp2);
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	for(int i=1;i<n;i++) 
	{
		cin>>X>>Y;
		v[X].push_back(Y);
		v[Y].push_back(X);
	}
	dfs(1,0,1);
	if(n>5000)
	{
		build(1,n,1);
		cin>>q;
		while(q--)
		{
			cin>>ql>>qr>>qk;
			cout<<query(ql,qr,1,n,1)<<endl;
		}
		return 0;
	}
	for(int i=1;i<=n;i++)
	{
		lc[i][i]=i;
		for(int j=i+1;j<=n;j++)
		{
			lc[i][j]=lca(lc[i][j-1],j);
		//	cout<<i<<j<<" "<<lc[i][j]<<endl;
		}
	}
	//for(int i=1;i<=n;i++) build(i,1,n,1);
	cin>>q;
	while(q--)
	{
		ans=0;
		cin>>ql>>qr>>qk;
		for(int i=ql;i<=qr-qk+1;i++) ans=max(dep[lc[i][i+qk-1]],ans);
		cout<<ans<<endl;
	}
	return 0;
}
