#include<bits/stdc++.h>
using namespace std;
int n,u,v,K,q,k,ans,LCA;
int head[100010],f[1000010][2],lg[100010],dep[100010];
struct c{
	int x,next;
}a[100010];
void add(int x,int y){
	a[++K].x=y;
	a[K].next=head[x];
	head[x]=K;
}
int lca(int x,int y){
	if(dep[x]>dep[y])swap(x,y);
	while(dep[y]>dep[x])
	{
		y=f[y][lg[dep[y]-dep[x]]];
	}

	if(x==y)return x;
	for(int i=lg[dep[x]];i;i--)
	{
		if(f[x][i]!=f[y][i])
		{
			x=f[x][i],y=f[y][i];
		}
	}
	return f[x][0];
}
void dfs(int x,int fa){
	for(int i=head[x];i;i=a[i].next){
		int y=a[i].x;
			if(y==fa)continue;
		dep[y]=dep[x]+1;
	
		dfs(y,x);
	}
	for(int i=1;i<=lg[dep[x]];i++)
	{
		f[x][i]=f[f[x][i-1]][i-1];
	}
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&u,&v);
		add(u,v);
		add(v,u);
	}
	scanf("%d",&q);
	for(int i=1;i<=n;i++)
		lg[i]=lg[i>>1]+1;
	dep[1]=1;
	dfs(1,0);	
	for(int i=1;i<=q;i++)
	{
		scanf("%d%d%d",&u,&v,&k);
		for(int j=u;j+k<=v;j++)
		{
			int LCA=j;
			for(int s=j;s<j+k;s++)
			{
				LCA=lca(LCA,s+1);
			}
			ans=max(dep[LCA],ans);
		}
		printf("%d\n",ans);
	}
	
} 
/*
6
5 6
6 1
6 2
2 3
2 4
3
2 5 2
1 4 1
1 6 3

*/ 
