#include<bits/stdc++.h>
using namespace std;
int n , q;
vector<int> vec[100005];
int dis[200005][35] , dep[100005];
void dfs(int x , int fa){
	dis[x][0] = fa;
	dep[x] = dep[fa] + 1;
	for(int i = 1 ; i <= 30 ; i++) dis[x][i] = dis[dis[x][i - 1]][i - 1];
	for(auto i : vec[x]){
		if(i == fa) continue;
		dfs(i , x);
	}
}
int lca(int x , int y){
	if(dep[x] > dep[y]) swap(x , y);
	for(int i = 30 ; i >= 0 ; i--){
		if(dep[y] - dep[x] >= pow(2 , i)) y = dis[y][i];
	}
	if(x == y) return x;
	for(int i = 30 ; i >= 0 ; i--){
		if(dis[x][i] != dis[y][i]){
			x = dis[x][i];
			y = dis[y][i];
		} 
	}
	return dis[x][0];
}
int du[500005];
int Lca[5005][5005] , st[500005][35];
int a[500005] , jie[105];
void stt(int n){
	for(int i = 1 ; i <= n ; i++) st[i][0] = dep[i];
	int len = log2(n);
	cout << len << "\n";
	for(int i = 1 ; i <= len + 1 ; i++){
		for(int j = 1 ; j + jie[i] - 1 <= n ; j++){
			st[j][i] = st[j][i - 1] + st[j + jie[i - 1]][i - 1];
		} 
	} 
}
int main(){
	freopen("query.in" , "r" , stdin);
	freopen("query.out" , "w" , stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0); 
	cin >> n;
	for(int i = 1 ; i < n ; i++){
		int u , v;
		cin >> u >> v;
		vec[u].push_back(v);
		vec[v].push_back(u);
	}
	dfs(1 , 0);
	for(int i = 1 ; i <= n ; i++){
		Lca[i][i] = i;
		for(int j = i + 1 ; j <= n ; j++){
			Lca[i][j] = lca(Lca[i][j - 1] , j);
		} 
	}	
	cin >> q;
	while(q--){
		int l , r , k;
		cin >> l >> r >> k;
		int maxn = 0; 
		for(int i = l ; i + k - 1 <= r ; i++){
			maxn = max(maxn , dep[Lca[i][i + k - 1]]);
		} 
		cout << maxn << "\n";
	}
	return 0;
} 
