#include<iostream>
#include<vector>
using namespace std;
int f[100005][25];
int dep[100005];
vector<int> G[100005];
void dfs(int u,int fa){
	f[u][0]=fa,dep[u]=dep[fa]+1;
	for(int i=1;i<=20;i++){
		f[u][i]=f[f[u][i-1]][i-1];
	}
	for(auto v:G[u]){
		if(v!=fa) dfs(v,u);
	}
}
int lca(int x,int y){
	for(int i=20;i>=0;i--){
		if(dep[x]-(1<<i)>=dep[y]) x=f[x][i];
	}
	for(int i=20;i>=0;i--){
		if(dep[y]-(1<<i)>=dep[x]) y=f[y][i];
	}
	if(x==y) return x;
	for(int i=20;i>=0;i--){
		if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
	}
	return f[x][0];
}
int st[100005][25];
int query(int l,int r){
	int k=__lg(r-l+1);
	return lca(st[r][k],st[l+(1<<k)][k]);
}
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 u,v;
		cin>>u>>v;
		G[u].push_back(v);
		G[v].push_back(u);
	}
	dfs(1,0); 
	for(int i=1;i<=n;i++){
		st[i][0]=lca(i,i-1);
		for(int k=1;k<=20;k++){
			st[i][k]=lca(st[i][k-1],st[i-(1<<k)][k-1]);
		}
	}
	//for(int i=1;i<=n;i++) cout<<st[i][1];
	cin>>q;
	while(q--){
		int l,r,k;
		cin>>l>>r>>k;
		int ans=0;
		for(int i=l;i+k-1<=r;i++){
			int x=query(i,i+k-1);
			ans=max(ans,dep[x]);
		}
		cout<<ans<<'\n';
	}
}
