#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int n;
constexpr int N=5e5+10;
std::vector<int>g[N];
void ins(int x,int y)
{
	g[x].emplace_back(y);
}
namespace Chain
{
	struct trnode
	{
		int fa,siz,dep,son,dfn,top;
	}
	tr[N];
	void prepare(int x,int fa)
	{
		tr[x]={fa,1,tr[fa].dep+1,0,0,0};
		for(int &y:g[x])
		{
			if(y==fa)
				continue;
			prepare(y,x);
			tr[x].siz+=tr[y].siz;
			if(tr[tr[x].son].siz<tr[y].siz)
				tr[x].son=y;
		}
	}
	int pos[N],num;
	void dfs(int x,int tp)
	{
		tr[x].dfn=++num;
		tr[x].top=tp;
		pos[num]=x;
		if(tr[x].son)
			dfs(tr[x].son,tp);
		for(int &y:g[x])
		{
			if(y==tr[x].fa||y==tr[x].son)
				continue;
			dfs(y,y);
		}
	}
	void work(int rt)
	{
		prepare(rt,0);
		dfs(rt,rt);
	}
}
namespace Segtree
{
	struct trnode
	{
		int l,r,lc,rc;
		int sum;
		int tag;
	}
	tr[N<<1];int trlen;
	#define lc tr[now].lc
	#define rc tr[now].rc
	void Plus(int now,int c)
	{
		tr[now].sum+=c;
		tr[now].tag+=c;
	}
	void pushup(int now)
	{
		tr[now].sum=tr[lc].sum+tr[rc].sum;
	}
	void pushdown(int now)
	{
		if(tr[now].tag)
		{
			Plus(lc,tr[now].tag);
			Plus(rc,tr[now].tag);
			tr[now].tag=0;
		}
	}
	void build(int l,int r)
	{
		int now=++trlen;
		tr[now]={l,r};
		if(l==r)
			return ;
		int mid=(l+r)>>1;
		lc=trlen+1;build(l,mid);
		rc=trlen+1;build(mid+1,r);
	}
	void modify(int now,int l,int r)
	{
		if(l<=tr[now].l&&tr[now].r<=r)
			return Plus(now,1);
		pushdown(now);
		int mid=(tr[now].l+tr[now].r)>>1;
		if(l<=mid)
			modify(lc,l,r);
		if(r>=mid)
			modify(rc,l,r);
		pushup(now);
	}
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1,x,y;i<n;i++)
	{
		scanf("%d%d",&x,&y);
		ins(x,y);
		ins(y,x);
	}
	int q;scanf("%d",&q);
	while(q--)
	{
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
	}
	return 0;
}
