#include<bits/stdc++.h>
#define rep(i , m , n) for(register int i = m; i <= n; i++)

using namespace std;
int n;
vector<int> e[100005];
int f[100005] , dep[100005];
void Build(int u , int fa , int d){
	f[u] = fa , dep[u] = d;
	for(int i = 0; i < e[u].size(); i++)
		if(e[u][i] != fa)Build(e[u][i] , u , d + 1);
}
int val[505][505];
int main(){
	freopen("query.in" , "r" , stdin);
	freopen("query.out" , "w" , stdout); 
	scanf("%d" , &n);
	rep(i , 1 , n - 1){
		int u , v;
		scanf("%d%d" , &u , &v);
		e[u].push_back(v) , e[v].push_back(u);
	}
	Build(1 , 1 , 1);
	rep(i , 1 , n){
		rep(j , 1 , n){
			int u = i , v = j;
			if(dep[u] < dep[v])swap(u , v);
			while(dep[u] > dep[v])u = f[u];
			while(u != v)u = f[u] , v = f[v];
			val[i][j] = u;
		}
	}
//	rep(i , 1 , n){
//		rep(j , 1 , n)cout << val[i][j] << ' ';
//		cout << endl;
//	}
	int q;
	scanf("%d" , &q);
	rep(i , 1 , q){
		int l , r , k;
		scanf("%d%d%d" , &l , &r , &k);
		int ans = 0;
		rep(L , l , r - k + 1){
			int Fa = L;
			rep(t , L + 1 , L + k - 1){
				Fa = val[Fa][t];
			}
			ans = max(ans , dep[Fa]);
		}
		printf("%d\n" , ans);
	}
	return 0;
}
//6
//5 6
//6 1
//6 2
//2 3
//2 4
//3
//2 5 2
//1 4 1
//1 6 3

