#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=5e5+5;
int n,q,a,b,l,r,k,dep[MAXN];
int f[MAXN][25],num[MAXN][25];
int to[MAXN][25];
struct Edge{ 
	int v,nxt;
} e[MAXN*2];
int head[MAXN],tot;
void e_add(int a,int b) 
{ 
	e[++tot].v=b;
	e[tot].nxt=head[a];
	head[a]=tot;
} 
void dfs(int x,int fa) 
{ 
	f[x][0]=num[x][0]=fa;
	dep[x]=dep[fa]+1;
	for(int i=head[x];i;i=e[i].nxt) 
	{ 
		int v=e[i].v;
		if(v==fa) continue;
		dfs(v,x);
	} 
} 
int lca(int x,int y) 
{ 
	if(!x||!y||x>n||y>n) return 0;
	while(dep[x]<dep[y]) swap(x,y);
	for(int i=20;i>=0;--i) 
		if(dep[f[x][i]]>=dep[y]) 
			x=f[x][i];
	if(x==y) return x;
	for(int i=20;i>=0;--i) 
		if(f[x][i]!=f[y][i]) 
			x=f[x][i],y=f[y][i];
	return f[x][0];
} 
int chat(int x,int y) 
{ 
	int Lca=x;
	for(int i=20;i>=0;--i) 
		if(to[x][i]<=y) 
			Lca=lca(Lca,num[x][i]),x=to[x][i];
	return Lca;
} 
void solve1() 
{ 
	int maxx=0;
	for(int i=l;i+k-1<=r;++i) 
	{ 
		int j=i+k-1;
		cout<<i<<" "<<j<<":"<<chat(i,j)<<"\n";
		maxx=max(maxx,dep[chat(i,j)]);
	} 
	cout<<maxx<<"\n";
} 
int main() 
{ 
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n;
	for(int i=1;i<n;++i) 
	{ 
		cin>>a>>b;
		e_add(a,b);
		e_add(b,a);
		to[i][0]=i+1;
	} 
	dfs(1,1);
	for(int i=1;i<=20;++i) 
		for(int j=1;j<=n;++j) 
			f[j][i]=f[f[j][i-1]][i-1],
			to[j][i]=to[to[j][i-1]][i-1];
	for(int i=1;i<=20;++i) 
		for(int j=1;j<=n;++j) 
			num[j][i]=lca(num[j][i-1],num[to[j][i-1]][i-1]);
	for(int i=1;i<=n;++i) 
	cin>>q;
	while(q--) 
	{ 
		cin>>l>>r>>k;
		if(n<=5000) solve1();
	} 

	return 0;
} 
