#include<bits/stdc++.h>
using namespace std;
const int N=5050;
const int M=15;

inline int read(){
	int x=0;char ch=getchar();
	while(ch<'0'||ch>'9'){
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		x=x*10+(ch^48);
		ch=getchar();
	}
	return x;
}

int n,q,maxdep;
int dep[N];
int jmp[M][N];
int L[M][N];
vector<int>e[N];

void dfs0(int u,int fa,int d){
	maxdep=max(maxdep,d);
	dep[u]=d;
	jmp[0][u]=fa;
	for(int v:e[u]){
		if(v!=fa){
			dfs0(v,u,d+1);
		}
	}
	return;
}

void init(){
	for(int j=1;(1<<(j-1))<=maxdep;j++){
		for(int i=1;i<=n;i++){
			jmp[j][i]=jmp[j-1][jmp[j-1][i]];
		}
	}
	return;
}

int lca(int x,int y){
	if(dep[x]<dep[y]){
		swap(x,y);
	}
	int cha=dep[x]-dep[y];
	for(int k=13;k>=0;k--){
		if((1<<k)<=cha){
			cha-=(1<<k);
			x=jmp[k][x];
		}
	}
	if(x==y){
		return x;
	}
	for(int k=13;k>=0;k--){
		if(jmp[k][x]!=jmp[k][y]){
			x=jmp[k][x],y=jmp[k][y];
		}
	}
	return jmp[0][x];
}

int rmq(int l,int r){
	for(int k=13;k>=0;k--){
		if((r-l+1)>=(1<<k)){
			return lca(L[k][l],L[k][r-(1<<k)+1]);
		}
	}
}

void solve(){
	n=read();
	for(int i=1;i<n;i++){
		int u,v;;
		u=read();
		v=read();
		e[u].push_back(v),e[v].push_back(u);
	}
	dfs0(1,0,1);
	init();
	for(int i=1;i<=n;i++){
		L[0][i]=i;
	}
	for(int j=1;(1<<(j-1))<=n;j++){
		for(int i=1;i+(1<<(j-1))<=n;i++){
			L[j][i]=lca(L[j-1][i],L[j-1][i+(1<<(j-1))]);
		}
	}
	q=read();
	while(q--){
		int l,r,k,ans=0;
		l=read();r=read();k=read();
		for(int i=l;i+k-1<=r;i++){
			ans=max(ans,dep[rmq(i,i+k-1)]);
		}
		cout<<ans<<"\n";
	}
	return;
}

signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	
	int T;
	T=1;
	while(T--){
		solve();
	}
	return 0;
}

