#include<bits/stdc++.h>
using namespace std;

const int N=500005;

int n,q,ql,qr,qk,ans;
int head[N*2],nxt[N*2],to[N*2],cnt;
int lg[N],f[N][23];
int depth[N],fa[N];
bool vis[N];
void add(int u,int v){
	nxt[++cnt]=head[u];
	to[cnt]=v;
	head[u]=cnt;
	return ; 
}

void build(){
	for(int i=1;i<=n;i++){
		f[i][1]=fa[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<=lg[depth[i]];j++){
			f[i][j]=f[f[i][1<<(j)]][f[i][1<<(j)]];
		}
	}
}

void dfs(int u){
	
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i];
		if(!vis[v]){
			vis[v]=1;
			fa[v]=u;
			depth[v]=depth[u]+1;
			dfs(v);
		}
		
	}
	return ;
}

int lca(int x,int y){
	if(depth[x]>depth[y]){
		swap(x,y);
	}
	
	while(depth[x]<depth[y]){
		y=fa[y];
	}
	if(x==y) return x;
	
	while(x!=y){
		x=fa[x];
		y=fa[y];
	}
	return x;
}

int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout); 

	cin>>n;
	for(int i=1;i<=n;i++){
		fa[i]=i;
	}
	for(int x,y,i=1;i<=n-1;i++){
		cin>>x>>y;
		add(x,y);
		add(y,x);
	}
	
//	for(int i=1;i<=n;i++){
//		lg[i]=log2(i);
//	}
	vis[1]=1;
	depth[1]=1;
	dfs(1);
//	build();
	cin>>q;
	while(q--){
		ans=0;
		cin>>ql>>qr>>qk;
		for(int i=ql;i+qk-1<=qr;i++){
			
			for(int j=i+qk-1;j<=qr;j++){
				
				int lc=i; 
				for(int l=i+1;l<=j;l++){
					lc=lca(lc,l);
					if(depth[lc]<ans) break;			
				}
				ans=max(ans,depth[lc]);
			}
			
		}
		cout<<ans<<endl;
	}
	
	return 0;
} 
