#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,t,q,f[N][20],dep[N],a[N<<2];
vector<int>e[N];
void buildLCA(){
	queue<int>q;
	q.push(1);
	dep[1]=1;
	while(!q.empty()){
		int x=q.front();
		q.pop();
		for(auto y:e[x]){
			if(dep[y]) continue;
			dep[y]=dep[x]+1;
			f[y][0]=x;
			for(int i=1;i<=t;i++) f[y][i]=f[f[y][i-1]][i-1];
			q.push(y);
		}
	}
}
int findLCA(int x,int y){
	if(dep[x]>dep[y]) swap(x,y);
	for(int i=t;i>=0;i--){
		if(dep[f[y][i]]>=dep[x]){
			y=f[y][i];
		}
	}
	if(x==y) return x;
	for(int i=t;i>=0;i--){
		if(f[x][i]!=f[y][i]){
			x=f[x][i];
			y=f[y][i];
		}
	}
	return f[x][0];
}
void build(int root,int l,int r){
	if(l==r){
		a[root]=l;
		return;
	}
	int mid=(l+r)>>1;
	build(root<<1,l,mid);
	build(root<<1|1,mid+1,r);
	a[root]=findLCA(a[root<<1],a[root<<1|1]);
}
int query(int root,int l,int r,int ql,int qr){
	if(l>=ql&&r<=qr) return a[root];
	int mid=(l+r)>>1;
	if(ql<=mid){
		if(qr<=mid) return query(root<<1,l,mid,ql,qr);
		return findLCA(query(root<<1,l,mid,ql,qr),query(root<<1|1,mid+1,r,ql,qr));
	} 
	return query(root<<1|1,mid+1,r,ql,qr);
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	t=(int)log2(n)+1;
	for(int i=1,u,v;i<n;i++){
		scanf("%d%d",&u,&v);
		e[u].push_back(v);
		e[v].push_back(u);
	}
	buildLCA();
	build(1,1,n);
	scanf("%d",&q);
	while(q--){
		int l,r,k,ans=1;
		scanf("%d%d%d",&l,&r,&k);
		for(int i=l;i<=r;i++){
			for(int j=i+k-1;j<=r;j++){
				ans=max(ans,dep[query(1,1,n,i,j)]);
			}
		}
		printf("%d\n",ans);
	}
}
