#include<bits/stdc++.h>

using namespace std;

const int N=2e6+10;

#define int long long

inline int read(){
	int d=0,f=1;
	char a=getchar();
	while(a<'0'||a>'9'){if(a=='-')f=-1;a=getchar();}
	while(a>='0'&&a<='9'){d=d*10+a-48;a=getchar();}
	return d*f;
}

int n,q,idx;
int h[N],to[N],ne[N],dep[N],f[N];
int dp[N][41],vis[510][510];

void add(int u,int v){
	to[++idx]=v;
	ne[idx]=h[u];
	h[u]=idx;
}

void dfs(int u,int fa){
	dep[u]=dep[fa]+1;f[u]=fa;
	for(int i=h[u];i!=-1;i=ne[i]){
		int v=to[i];
		if(v==fa)continue;
		dfs(v,u);
	} 
}

void init(int u,int fa){
	dp[u][0]=f[u];
	for(int i=1;i<=20;i++){
		dp[u][i]=dp[dp[u][i-1]][i-1];
	}
	for(int i=h[u];i!=-1;i=ne[i]){
		int v=to[i];
		if(v==fa)continue;
		init(v,u);
	}
}

int LCA(int x,int y){
	if(x==y)return x;
	if(dep[y]>dep[x])swap(x,y);
	for(int i=20;i>=0;i--){
		if(dep[dp[x][i]]>dep[y])x=dp[x][i];
	}
	x=dp[x][0];
	if(x==y)return x;
	for(int i=20;i>=0;i--){
		if(dp[x][i]!=dp[y][i])x=dp[x][i],y=dp[y][i];
	}
	return f[x];
}

signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	memset(h,-1,sizeof h);
	n=read();
	for(int i=1;i<n;i++){
		int u=read(),v=read();
		add(u,v);add(v,u);
	}
	dep[1]=0;
	dfs(1,0);
	f[1]=1;
	init(1,0);
	q=read();
	while(q--){
		int l=read(),r=read(),k=read(),ans=0;
		for(int L=l;L<=r;L++){
			for(int R=l;R<=r;R++){
				if(R-L+1<k)continue;
				int lca;
				if(L==R){
					ans=max(ans,dep[L]);
				}
				else{
					if(vis[L][L+1]!=0)lca=vis[L][L+1];
					else vis[L][L+1]=LCA(L,L+1),lca=vis[L][L+1];
					for(int j=L+1;j<=R;j++){
						if(vis[lca][j]!=0)lca=vis[lca][j];
						else vis[lca][j]=LCA(lca,j),lca=vis[lca][j];
					}
//					cout<<L<<" "<<R<<" "<<lca<<endl;
					ans=max(ans,dep[lca]);
				}
			}
		}
		cout<<ans<<endl;
	}
}
/*
6
5 6
6 1
6 2
2 3
2 4
3
2 5 2
1 4 1
1 6 3
*/
