#include<bits/stdc++.h>
using namespace std;
int n,ln,q;
int head[500005],dep[500005],fa[500005][22];
int lg[500005],st[500005][22];
struct path{
	int to,nxt;
}lu[1000005];
void build(int u,int v){
	lu[++ln].to=v;
	lu[ln].nxt=head[u];
	head[u]=ln;
	return;
}
void dfs(int x,int fat){
	fa[x][0]=fat;
	dep[x]=dep[fa[x][0]]+1;
	for(int i=1;1<<i<=n;i++){
		
		fa[x][i]=fa[fa[x][i-1]][i-1];
	}
	for(int i=head[x];i;i=lu[i].nxt){
		int v=lu[i].to;
		if(v!=fat)dfs(v,x);
	}
}
inline int lca(int x,int y){
	if(dep[x]<dep[y])swap(x,y);
	while(dep[x]>dep[y]) x=fa[x][lg[dep[x]-dep[y]]];
	if(x==y)return x;
	for(int i=20;i>=0;i--){
		if(fa[x][i]!=fa[y][i]){
			x=fa[x][i];y=fa[y][i];
		}
	}
	return fa[x][0];
}
void buildst(){
	for(int k=0;k<=lg[n]+1;k++){
		for(int i=1;i<=n;i++){
			if(k==0)st[i][0]=i;
			else{
				st[i][k]=lca(st[i][k-1],st[i+(1<<(k-1))][k-1]);
			}
		}
	}
}
inline int find(int l,int r){
	int d=r-l+1;
	return lca(st[l][lg[d]],st[r-(1<<lg[d])+1][lg[d]]);
}
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=2;i<=n;i++)lg[i]=lg[i>>1]+1;
	for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		build(u,v);build(v,u);
	}
	dfs(1,0);
	buildst();
	cin>>q;
	for(int i=1;i<=q;i++){
		int l,r,k;
		cin>>l>>r>>k;
		int tmp=0;
		for(int j=l;j+k-1<=r;j++){
			tmp=max(tmp,dep[find(j,j+k-1)]);
		}
		cout<<tmp<<endl;
	}
}
//CCF你怎么会出和CSP一样的结构的qwq 
//先试试暴力 
//lca应该是可重复贡献问题吧？ 
