#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=5e3+5,M=21;

int fst[N<<1],nxt[N<<1],T[N<<1],tot;
void add_edge(int a,int b){
	nxt[++tot]=fst[a];
	fst[a]=tot;
	T[tot]=b;
}

int n,q;
int f[N][M],dep[N];
void dfs(int p,int fp){
	dep[p]=dep[fp]+1; f[p][0]=fp;
	for(int i=1;i<M;i++) f[p][i]=f[f[p][i-1]][i-1];
	for(int i=fst[p];i;i=nxt[i]){
		int j=T[i];
		if(j==fp) continue;
		dfs(j,p);
	}
}

int getlca(int a,int b){
	if(dep[a]<dep[b]) swap(a,b);
	for(int i=M-1;i>=0;i--)
		if(dep[f[a][i]]>=dep[b])
			a=f[a][i];
	if(a==b) return a;
	for(int i=M-1;i>=0;i--)
		if(f[a][i]!=f[b][i]){
			a=f[a][i];
			b=f[b][i];
		}
	return f[a][0];
}

int g[N][N];

int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	
	scanf("%d",&n);
	int u,v;
	for(int i=1;i<n;i++){
		scanf("%d%d",&u,&v);
		add_edge(u,v);
		add_edge(v,u);
	}
	
	dfs(1,0);
	for(int i=1;i<=n;i++){
		g[i][i]=i;
		for(int j=i+1;j<=n;j++){
			if(g[i][j-1]==1){
				g[i][j]=1;
				continue;
			}
			g[i][j]=getlca(g[i][j-1],j);
//			cout<<i<<" "<<j<<" "<<g[i][j]<<"\n";
		}
	}
	
//	for(int i=1;i<=n;i++) cout<<dep[i]<<" ";
//	cout<<"\n";
	
	scanf("%d",&q);
	int l,r,k;
	while(q--){
		scanf("%d%d%d",&l,&r,&k);
		int ans=0;
		for(int i=l;i<=r;i++)
			for(int j=i+k-1;j<=r;j++){
				ans=max(ans,dep[g[i][j]]);
				break;
//				cout<<i<<" "<<j<<" "<<g[i][j]<<" "<<dep[g[i][j]]<<"\n";
			}
				
		printf("%d\n",ans);
	}
	return 0;
}


