#include<bits/stdc++.h>
#define ll long long
#define N 500005
using namespace std;
int n,dep[N],fa[N][21],q;
vector<int> v[N];
void dfs(int x,int f){
	for(int i=0;i<v[x].size();i++){
		if(v[x][i]==f)continue;
		fa[v[x][i]][0]=x;
		dep[v[x][i]]=dep[x]+1;
		dfs(v[x][i],x);
	}
}
int lca(int x,int y){
	if(dep[x]<dep[y])swap(x,y);
	for(int i=20;i>=0;i--)
		if(dep[fa[x][i]]>=dep[y])x=fa[x][i];
	if(x==y)return x;
	for(int i=20;i>=0;i--){
		if(fa[x][i]!=fa[y][i]){
			x=fa[x][i],y=fa[y][i];
		}
	}
	return fa[x][0];
}
int seg[4*N];
void pushup(int x){
	seg[x]=lca(seg[x*2],seg[x*2+1]);
}
void build(int x,int l,int r){
	if(l==r){
		seg[x]=x;
		return;
	}
	int mid=(l+r)>>1;
	build(x*2,l,mid);
	build(x*2+1,mid+1,r);
	pushup(x);
}
int query(int l,int r,int x,int xl,int xr){
	if(l<=xl&&xr<=r){
		return seg[x];
	}
	int mid=(xl+xr)>>1;
	int x1=0,x2=0;
	if(mid>=l)x1=query(l,r,x*2,xl,mid);
	if(mid<r)x2=query(l,r,x*2+1,mid+1,xr);
	if(x1&&x2)return lca(x1,x2);
	return x1+x2;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	int maxdeg=0;
	for(int i=1;i<n;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		v[x].push_back(y);
		v[y].push_back(x);
	}
	dep[1]=1;
	dfs(1,0);
	for(int i=1;i<=20;i++){
		for(int j=1;j<=n;j++){
			fa[j][i]=fa[fa[j][i-1]][i-1];
		}
	}
	build(1,1,n);
	scanf("%d",&q);
	while(q--){
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
		for(int i=l;i<=r-k+1;i++){
			int m=query(i,i+k-1,1,1,n);
			printf("%d ",m);
		}
		cout<<endl;
	}
	return 0;
}
