#include<bits/stdc++.h>
#define gt getchar()
#define pt putchar
using namespace std;
int getin(){
	int ans=0,f=1;
	char c=gt;
	while(!isdigit(c)){
		if(c=='-') f=-1;
		c=gt;
	}
	while(isdigit(c)){
		ans=(ans<<1)+(ans<<3)+(c^48);
		c=gt;
	}
	return ans*f;
}
void puto(int x){
	if(x<0){
		pt('-');
		x=-x;
	}
	if(x>=10) puto(x/10);
	pt(x%10+'0');
}

const int N=2e5+5;
int h[N],cnt;
struct node{
	int to,next;
}e[N];
void add(int u,int v){
	cnt++;
	e[cnt].next=h[u];
	e[cnt].to=v;
	h[u]=cnt;
}
int du[N],d[N],s[N];
int st[N][40];
int st2[N][40];
int st3[N][40];
int logg[N];
void dfs(int f,int dd,int x,int sx){
	d[x]=dd;s[x]=sx;
	int ans=0;
	for(int i=h[x];i;i=e[i].next){
		int t=e[i].to;
		if(t==f) continue;
		ans++;
		if(x==1) dfs(x,dd+1,t,ans);
		else dfs(x,dd+1,t,sx);
	}
	return ;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	int n=getin();
	for(int i=1;i<n;i++){
		int u,v;
		u=getin(),v=getin();
		add(u,v);add(v,u);
		du[u]++,du[v]++;
	}
	bool f=1;
	for(int i=1;i<=n;i++){
		if(du[i]>2) f=0;
	}
	int q=getin();
	d[1]=1;
	for(int i=h[1];i;i=e[i].next) cout<<i;
	dfs(0,1,1,0);
	for(int i=1;i<=n;i++) st[i][0]=d[i],st2[i][0]=st3[i][0]=s[i];
	for(int i=1;i<=n;i++){
		for(int j=1;(1<<i)+j-1<=n;j++) st[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;(1<<i)+j-1<=n;j++) st2[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;(1<<i)+j-1<=n;j++) st3[i][j]=min(st[i][j-1],st[i+(1<<(j-1))][j-1]);
	}
	logg[0]=-1; 
	for(int i=1;i<=n;i++) logg[i]=logg[i>>1]+1; 
	while(q--){
		int l,r,k;
		l=getin();r=getin();k=getin();
		if(f){
			int sum=0;
			int y=logg[k];
			for(int l;r-l+1>=k;l++){
				int maxn=max(st[l][y],st[l+k-(1<<y)][y]);
				if(max(st2[l][y],st2[l+k-(1<<y)][y])!=max(st2[l][y],st2[l+k-(1<<y)][y])) maxn=1;
				sum=max(maxn,sum); 
			}
			cout<<sum;
		}
	}




	return 0;
}


