#include <bits/stdc++.h>

using namespace std;
const int N=5005;
int n,q,cnt,h[N],st[27][N],dep[N],ans[N][N];
struct Edge{
	int to,nxt;
}e[N*2];
void add_edge(int u,int v){
	e[++cnt].to=v;
	e[cnt].nxt=h[u];
	h[u]=cnt;
}
void dfs(int x){
	for (int i=1;i<20;i++){
		st[i][x]=st[i-1][st[i-1][x]];
	}
	for (int i=h[x];i!=-1;i=e[i].nxt){
		int v=e[i].to;if (v==st[0][x]) continue ;
		st[0][v]=x;dep[v]=dep[x]+1;dfs(v);
	}
}
int lca(int x,int y){
	if (dep[x]>dep[y]) swap(x,y);
	for (int j=19;j>=0;j--) if (dep[y]-dep[x]>=(1<<j)) y=st[j][y];
	if (x==y) return x;
	for (int j=19;j>=0;j--){
		if (st[j][x]!=st[j][y]) x=st[j][x],y=st[j][y];
	}return st[0][x];
}
void work(){
	memset(h,-1,sizeof(h));
	for (int i=1;i<n;i++){
		int u,v;cin>>u>>v;
		add_edge(u,v);add_edge(v,u);
	}dep[1]=1;dfs(1);
	//cout<<lca(1,3)<<endl;
	for (int i=1;i<=n;i++){
		int tmp=i;ans[i][i]=i;
		for (int j=i+1;j<=n;j++){
			tmp=lca(tmp,j);ans[i][j]=tmp;
		}
	}cin>>q;
	for (int i=1;i<=q;i++){
		int l,r,k,as=0;cin>>l>>r>>k;
		for (int j=l;j<=r-k+1;j++){
			as=max(dep[ans[j][j+k-1]],as);
		}cout<<as<<endl;
	}
}
//void wk(){
//	memset(h,-1,sizeof(h));
//	for (int i=1;i<n;i++){
//		int u,v;cin>>u>>v;
//		add_edge(u,v);add_edge(v,u);
//	}dfs(1);cin>>q;
//	while (q--){
//		int l,r,k;cin>>l>>r>>k;
//		cout<<
//	}
//	
//}
signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(0);
	cin>>n;work();
//	if (n<=5000) work();
//	else wk();
	return 0;
}
