#include<iostream>
using namespace std;
const int N=5e5+10;
int fir[N<<1],nex[N<<1],to[N<<1],tot;
int f[N][20];
int dep[N];
int ooo[N];
bool A=true;

inline void add(int x,int y)
{ 
	nex[++tot]=fir[x];
	fir[x]=tot;
	to[tot]=y;
}

inline void build(int u,int fa)
{
	dep[u]=dep[fa]+1; 
	f[u][0]=fa;
	for(int i=1;i<=19;i++)
		f[u][i]=f[f[u][i-1]][i-1];
	for(int i=fir[u];i;i=nex[i])
	{
		int v=to[i];
		if(v!=fa)
			build(v,u);
	}
	return;
}

inline int Q_LCA(int x,int y)
{
	if(dep[x]<dep[y])
		swap(x,y);
	for(int i=19;i>=0;i--)
	{
		int xx=f[x][i];
		if(dep[xx]>=dep[y])
			x=xx;
		if(dep[x]==dep[y])
			break;
	}
	if(x==y)
		return x;
	for(int i=19;i>=0;i--)
	{
		int xx=f[x][i];
		int yy=f[y][i];
		if(dep[xx]!=dep[yy])
		{
			x=xx;
			y=yy;
		}
	}
	return f[x][0];
}

int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout); 
	int n,q;
	cin>>n;
	for(int i=1;i<n;i++)
	{
		int x,y;
		cin>>x>>y;
		add(x,y);
		add(y,x);
		ooo[x]++;
		ooo[y]++;
		if(ooo[x]>2 || ooo[y]>2)
			A=false;
	}
	
	if(ooo[1]!=1)
		A=false;
	
	build(1,0);
	
	cin>>q;
	
	for(int i=1;i<=q;i++)
	{
		int l,r,k;
		cin>>l>>r>>k;
		int ans=0;
		for(int j=l;j+k-1<=r;j++)
		{
			int LCA=j;
			if(k==1)
				LCA=j;
			else
			{
				for(int o=j+1;o<=j+k-1;o++)
				{
					if(A)
					{
						if(dep[LCA]>dep[o])
							LCA=o;
					}
					else
					{
						LCA=Q_LCA(LCA,o);
					}
					if(LCA==1)
						break;
				}
			}
			ans=max(ans,dep[LCA]);
		}
		cout<<ans<<endl;
	}
	return 0;
}
