#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+7;

struct Edge{
	int u,v,nxt;
};

int cnt,n,k;

Edge e[N];
int h[N];

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

void add(int u,int v){
	e[++cnt].v =v;
	e[cnt].u =u; 
	e[cnt].nxt =h[u];
	h[u]=cnt;
}

int dep[N];
bool vis[N];
int ans[N<<1];

inline int ls(int x){
	return x<<1;
}
inline int rs(int x){
	return x<<1|1;
}

void push_up(int p){
	ans[p]=min(ans[ls(p)],ans[rs(p)]);
}

void build(int l,int r,int p){
	if(l==r)ans[p]=dep[l];
	else{
		int mid=l+r>>1;
		build(l,mid,ls(p));
		build(mid+1,r,rs(p));
		push_up(p);
	}
} 

int query(int nl,int nr,int l,int r,int p){
	if(nl<=l&&r<=nr)return ans[p];
	int mid=l+r>>1,res=INT_MAX;
	if(nl<=mid)res=min(res,query(nl,nr,l,mid,ls(p)));
	if(mid<nr)res=min(res,query(nl,nr,mid+1,r,rs(p)));
	return res;
}

void bfs(int st){
	queue<pair<int,int>> q;
	q.push(make_pair(st,0));
	
	while(!q.empty()){
		pair<int,int> p=q.front();q.pop();
		dep[p.first]=p.second;
		vis[p.first]=true;
		for(int i=h[p.first];i;i=e[i].nxt){
			int v=e[i].v ;
			if(!vis[v]){
				q.push(make_pair(v,p.second+1));
			}
		}
	}
	
}

int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	
	int n;
	cin>>n;
	for(int i=1;i<n;i++){
		int u,v;
		u=read(),v=read();
		add(u,v);
		add(v,u);
	}
	
	bfs(1);
	
	build(1,n,1);
	
	int q;
	cin>>q;
	while(q--){
		int l,r,k,maxx=0;
		cin>>l>>r>>k;
		for(int i=l;i<=r-k;i++){
			maxx=max(maxx,query(i,i+k-1,1,n,1));
		} 
		printf("%d\n",maxx);
	}
	
    return 0;
}

