#include<bits/stdc++.h>
using namespace std;
void file(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
}
int re(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
	return x*f;
}
const int N = 5e5+10;
int n,q,ind[N],dep[N];
vector<int>G[N];
void solvel(){
	/*
	6
	
	*/
	int cnt1=0,cnt2=0;
	for(int i=1;i<=n;i++){cnt1+=(ind[i]==1),cnt2+=(ind[i]==2);}
//	cout<<cnt1<<" "<<cnt2<<" "<<n<<" "<<endl;
	if(cnt1+cnt2==n&&cnt1==2){
		int now=1,lst=1;dep[now]=0;
		now=G[now][0];
		while(G[now].size()>1){
			dep[now]=dep[lst]+1;
			for(int i=0;i<G[now].size();i++){if(G[now][i]!=lst){lst=now,now=G[now][i];break;}}
		}dep[now]=dep[lst]+1;
	}
}
int fa[N][30];
void dfs(int u,int F){
	fa[u][0]=F;
	for(int i=1;(1<<i)<=dep[u];i++){
		fa[u][i]=fa[fa[u][i-1]][i-1];
	}
	for(int v:G[u]){
		if(v==F)continue;
		dep[v]=dep[u]+1;
		dfs(v,u);
	}
}
int LCA(int x,int y){
	if(dep[x]>dep[y])swap(x,y);
	for(int i=29;i>=0;i--){
		if(dep[fa[y][i]]>=dep[x])y=fa[y][i];
	}
	if(y==x)return x;
	for(int i=29;i>=0;i--){
		if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
	}
	return fa[x][0];
}
int main(){
	file();
	n=re();
	for(int i=1;i<n;i++){
		int u=re(),v=re();
		G[u].push_back(v),G[v].push_back(u);
	}
	dep[1]=1;
	dfs(1,0);
	int q=re();while(q--){
		int l=re(),r=re(),k=re();
		int ans=0;
		for(int i=l;i<=r-k+1;i++){
			int now=i;
			for(int j=i+1;j<=i+k-1;j++){
				now=LCA(now,j);
			}
			ans=max(ans,dep[now]);
		}
		cout<<ans<<"\n";
	}
}
