#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
vector<int> g[N];
int n,m,lg2[N];
struct st_mx{
	int st[N][21];
	void init(int a[]){
		for(int i=1;i<=n;i++)st[i][0]=a[i];
		for(int j=1;j<=20;j++)
			for(int i=1;i+(1<<j)-1<=n;i++)
				st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
	}
	int query(int l,int r){
		int len=lg2[r-l+1];
		return max(st[l][len],st[r-(1<<len)+1][len]);
	}
}stx;
struct st_mn{
	int st[N][21];
	void init(int a[]){
		for(int i=1;i<=n;i++)st[i][0]=a[i];
		for(int j=1;j<=20;j++)
			for(int i=1;i+(1<<j)-1<=n;i++)
				st[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]);
	}
	int query(int l,int r){
		int len=lg2[r-l+1];
		return min(st[l][len],st[r-(1<<len)+1][len]);
	}
}stn;
int dfn[N],dep[N],fa[N][21],clk,rk[N];
void dfs(int u,int p){
	dfn[u]=++clk;
	rk[clk]=u;
	fa[u][0]=p;
	dep[u]=dep[p]+1;
	for(int i=1;i<=20;i++)
		fa[u][i]=fa[fa[u][i-1]][i-1];
	for(int v:g[u]){
		if(v==p)continue;
		dfs(v,u);
	}
}
int getlca(int u,int v){
	if(dep[u]<dep[v])swap(u,v);
	for(int d=dep[u]-dep[v],i=20;~i;i--)if(d&(1<<i))
		u=fa[u][i];
	if(u==v)return u;
	for(int i=20;~i;i--)if(fa[u][i]!=fa[v][i])
		u=fa[u][i],v=fa[v][i];
	return fa[u][0];
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d", &n);
	for(int i=2;i<=n;i++)lg2[i]=lg2[i/2]+1;
	for(int i=1;i<n;i++){
		int u,v;
		scanf("%d%d", &u ,&v);
		g[u].push_back(v);
		g[v].push_back(u);
	}
	dfs(1,0);
	stx.init(dfn),stn.init(dfn);
	int q;
	scanf("%d", &q);
	while(q--){
		int l,r,k;
		scanf("%d%d%d", &l, &r, &k);
		if(l>r)swap(l,r);
		int ans=0;
		for(int len=k;len<=r-l+1;len++)
			for(int u=l,v=u+len-1;v<=r;u++,v=u+len-1){
				int lca=getlca(rk[stn.query(u,v)],rk[stx.query(u,v)]);
				ans=max(ans,dep[lca]);
			}
		printf("%d\n", ans);
	}
	return 0;
}

