#include<bits/stdc++.h>
using namespace std;
const int N=1e6+11;
int head[N],to[N],nxt[N],cnt;
int ans[5010][5010];
void add(int u,int v){
	to[++cnt]=v;
	nxt[cnt]=head[u];
	head[u]=cnt;
}
bool vis[N];
int h[N],fa[N];
void ql(int u){
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i];
		if(!vis[v]){
			fa[v]=u;
//			cout<<u<<" "<<h[u]<<" ";
			h[v]=h[u]+1;
//			cout<<v<<" "<<h[v]<<endl;
			vis[v]=1;
			ql(v);
		}
	}
}
int n,q,l,r,k;
bool f[5010][5010];
void find(int k,int u){
	f[k][u]=1;
	if(fa[u]==0)return ;
//	f[u]=1;
	find(k,fa[u]);
}
int find1(int k,int u){
	if(f[k][u])return u;
	return find1(k,fa[u]);
}
bool tp=1,jud[N];
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	int u,v;
	for(int i=1;i<=n-1;i++){
		cin>>u>>v;
		add(u,v);
		add(v,u);
	}
	h[1]=1;
	vis[1]=1;
	ql(1);
	for(int i=1;i<=n;i++){
		if(jud[h[i]])tp=0;
		jud[h[i]]=1;
	}
	cin>>q;
	if(tp){
		
	}
	else{
		for(int i=0;i<n;i++){
			if(i==0){
				for(int j=1;j<=n;j++){
					find(j,j);
					ans[j][j]=j;
				}
				continue;
			}
			for(int j=1;j+i<=n;j++){
	//				memset(f,0,sizeof(f));
	//				find(j+i);
	//				if(i==0){
	//					ans[j][j]=j;
	//				}
				ans[j][j+i]=find1(j+i,ans[j][j+i-1]);
	//			if(i==k-1){
	//				tmp=max(tmp,h[ans[j][j+i]]);
	//			}
	//				cout<<ans[j][j+i]<<" ";
			}
	//			cout<<endl;
		}
	}
	
	while(q--){
		int tmp=0;
		scanf("%d%d%d",&l,&r,&k);
		for(int i=l;i+k-1<=r;i++){
			tmp=max(tmp,h[ans[i][i+k-1]]);
		}
		cout<<tmp<<endl;
//		cout<<endl;
	}
//	for(int i=1;i<=n;i++){
//		cout<<h[i]<<" ";
//	}
	return 0;
}
