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

inline int read(){
	int ans=0,f=1;char c=getchar();
	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
	while(isdigit(c)){ans=ans*10+c-48;c=getchar();}
	return ans*f;
}

inline void print(int x){
	if(x<0){putchar('-');x=-x;}
	if(x<10){putchar(x+48);return;}
	print(x/10);putchar(x%10+48);
	return;
}

const int N=1e6+10;
int n, q, dep[N];

int hd[N], nxt[N], en[N], CNT;
void add(int u, int v){
	CNT++;
	en[CNT]=v;
	nxt[CNT]=hd[u];
	hd[u]=CNT;
	return;
}

bool vis[N];
int tr[N*4];

void build_tr(int k, int l, int r){
	if(l==r){
		tr[k]=dep[l]; return;
	}
	int mid=(l+r)>>1;
	build_tr(k*2, l, mid);
	build_tr(k*2+1, mid+1, r);
	tr[k]=min(tr[k*2], tr[k*2+1]);
	return;
}

int query(int k, int l, int r, int x, int y){
	if(x<=l && r<=y) return tr[k];
	int mid=(l+r)>>1, ans=0x3f3f3f;
	if(x<=mid)
		ans=min(ans, query(k*2, l, mid, x, y));
	if(y>=mid+1)
		ans=min(ans, query(k*2+1, mid+1, r, x, y));
	
	return ans;
}

int main(){
	freopen("query.in", "r", stdin);
	freopen("query.out", "w", stdout);
	
	n=read();
	for(int i=1, u, v; i<=n-1; i++){
		u=read(), v=read();
		add(u, v); add(v, u);
	}
	
//	build(1, 1);
	
	int now=1, cnt=1;
	while(cnt<=n){
		vis[now]=true;
		dep[now]=cnt;
		for(int t=hd[now]; t; t=nxt[t])
			if(!vis[en[t]]){
				now=en[t];break;
			}
		cnt++;
	}
	
//	for(int i=1; i<=n; i++){
//		print(dep[i]);putchar(' ');
//	}
	
	build_tr(1, 1, n);
	
	
	q=read();
	int l, r, k;
	while(q--){
		l=read(), r=read(), k=read();
		print(query(1, 1, n, l, r));
		putchar('\n');
	}
	
	return 0;
}

