#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
const int N=500010;
struct node {
	int nxt,to;
} a[N*2];
int head[N],n,tot,x,y,q,du[N],dep[N],fat[N];
vector<int> g;
void add(int u,int v)
{
	a[++tot].nxt=head[u];
	a[tot].to=v;
	head[u]=tot;
} 
void dfs(int u,int fa)
{
	dep[u]=dep[fa]+1;
	for(int i=head[u];i;i=a[i].nxt) {
		int v=a[i].to;
		if( v==fa ) continue;
		fat[v]=u;
		dfs(v,u);
	}
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++) {
		scanf("%d%d",&x,&y);
		add(x,y);
		add(y,x);
		du[x]++,du[y]++;
	}
	int s=0;
	for(int i=1;i<=n;i++) {
		if( du[i]==1 ) {
			s=i;
			break;
		}
	}
	dfs(s,0);
	scanf("%d",&q);
	int l,r,k;
	while( q-- ) {
		g.clear();
		scanf("%d%d%d",&l,&r,&k);
		for(int i=l;i<=r;i++) g.push_back(dep[fat[i]]);
		sort(g.begin(),g.end());
		int len=l-r+1;
		printf("%d\n",g[len-k+1]); 
	}
	return 0;
}
