#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
int n,now,m,cnt,rnk[maxn],dep[maxn],tot;
vector<int>e[maxn],e1[maxn];
int dfn[maxn],top[maxn],siz[maxn],son[maxn],fa[maxn];
int st[maxn][30];
void dfs1(int u){
	siz[u]=1;
	for(int v:e[u]){
		if(!dep[v]){
			dep[v]=dep[u]+1;
			fa[v]=u;
			dfs1(v);
			if(siz[son[u]]<siz[v])son[u]=v;
		}
	}
}
void dfs2(int u,int f){
	top[u]=f;
	dfn[u]=++tot;
	if(!son[u])return ;
	dfs2(son[u],f);
	for(int v:e[u]){
		if(v!=fa[u]&&v!=son[u])dfs2(v,v);
	}
}
int lca(int u,int v){
	if(u==0||v==0||u>n||v>n)return 1;
	while(top[u]!=top[v]){
		// cout<<top[u]<<' '<<top[v]<<endl;
		if(dep[top[u]]<dep[top[v]])swap(u,v);
		u=fa[top[u]];
	}
	if(dep[u]<dep[v])return u;
	return v;
}
int query(int u,int v){
	// for(int i=u;i<=v;i++)u=lca(u,i);
	// return u;
	int now=u;
	for(int i=30;i>-1;i--){
		if(u+(1<<i)<=v){
			now=lca(now,st[u][i]);
			u=u+(1<<i);
		}
	}
	return now;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	dep[1]=fa[1]=1;
	dfs1(1);
	dfs2(1,1);
	for(int i=1;i<n;i++){
		st[i][0]=lca(i,i+1);
	}
	st[n][0]=n;
	for(int i=1;i<=29;i++){
		for(int j=1;j<=n;j++)if(j+(1<<i)<=n)st[j][i]=lca(st[j][i-1],st[j+(1<<(i-1))][i-1]);
	}
	int q;
	cin>>q;
	while(q--){
		int l,r,k;
		cin>>l>>r>>k;int ans=1;
		for(int i=k;i<=r-l+1;i++){
			for(int j=l;j+k-1<=r;j++){
				// cnt++;
				ans=max(ans,dep[query(j,j+k-1)]);
			}
		}
		cout<<ans<<'\n';
	}
	// cout<<cnt<<endl;
}