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

typedef long long ll;
const ll N=5e5+50;
ll n,m,la[N],idx,dis[N],an[N],iid,lc[N][15];
struct Node{
	ll to,nex;
}tt[N*2];

void add(ll u,ll v){
	idx++;
	tt[idx].nex=la[u],tt[idx].to=v,la[u]=idx;
}

ll lca(ll u,ll v){
	if(dis[u]<dis[v])swap(u,v);
	for(ll i=14;i>=0;i--)if(dis[lc[u][i]]>=dis[v])u=lc[u][i];
	for(ll i=14;i>=0;i--)if(lc[u][i]!=lc[v][i])u=lc[u][i],v=lc[v][i];
	if(u!=v)u=lc[u][0];
	return u;
}

void dfs(ll x,ll fu){
	lc[x][0]=fu,dis[x]=dis[fu]+1;
	for(ll i=la[x];i;i=tt[i].nex){
		if(tt[i].to!=fu)dfs(tt[i].to,x);
	}
}

void dfs2(ll nw,ll en,ll k,ll hav,ll zx,bool p){
	if(nw>en)return;
	if(hav==1)zx=nw;
	if(p){
		zx=lca(zx,nw);
		if(hav==k)an[++iid]=dis[zx];
	}
	dfs2(nw+1,en,k,hav,zx,0);
	dfs2(nw+1,en,k,hav+1,zx,1);
}

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

	scanf("%lld",&n);
	for(ll i=1;i<n;i++){
		ll u,v;
		scanf("%lld%lld",&u,&v);
		add(u,v);add(v,u);
	}
	dfs(1,0);
//	for(ll i=1;i<=n;i++)printf("%lld %lld\n",i,dis[i]);
	
	//ÐÔÖÊA
	bool fA=0;
	for(ll i=1;i<=n;i++)if(dis[i]==n)fA=1;
	if(fA){
		scanf("%lld",&m);
		while(m--){
			ll l,r,k;
			iid=0;
			scanf("%lld%lld%lld",&l,&r,&k);
			for(ll i=l;i<=r;i++)an[++iid]=dis[i];
			sort(an+1,an+1+iid);
			printf("%lld\n",an[iid-k+1]);
		}
		return 0;
	}
	
	//±©Á¦
	for(ll i=1;i<=14;i++)for(ll j=1;j<=n;j++)lc[j][i]=lc[lc[j][i-1]][i-1];
//	for(ll i=0;i<=14;i++){
//		for(ll j=1;j<=n;j++){
//			printf("%lld %lld %lld\n",i,j,lc[j][i]);
//		}
//	}
	scanf("%lld",&m);
	while(m--){
		ll l,r,k;
//		scanf("%lld%lld",&l,&r);
//		printf("%lld\n",lca(l,r));
		scanf("%lld%lld%lld",&l,&r,&k);
		dfs2(l,r,k,0,0,0);
		dfs2(l,r,k,1,0,1);
		sort(an+1,an+1+iid);
		printf("%lld\n",an[iid-k+1]);
	}
	
	return 0;
}
/*
5
2 3
2 5
5 4
4 1
10
1 2 1
1 5 2
1 5 3
*/
