#include<bits/stdc++.h>
using namespace std;
const int N=510;
int n,q,u,v,l,r,k,dep[N],f[N][26],a[N][N];
vector<int> e[N];
int read()
{
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
void dfs(int u,int fa)
{
	dep[u]=dep[fa]+1;
	f[u][0]=fa;
	for(int i=1;i<26;i++) f[u][i]=f[f[u][i-1]][i-1];
	for(int i=0;i<e[u].size();i++)
	{
		int v=e[u][i];
		if(v==fa) continue;
		dfs(v,u);
	}
}
int lca(int u,int v)
{
	if(dep[u]<dep[v]) swap(u,v);
	for(int i=25;i>=0;i--)
	{
		if(dep[f[u][i]]>=dep[v]) u=f[u][i];
	}
	if(u==v) return u;
	for(int i=25;i>=0;i--)
	{
		if(f[u][i]!=f[v][i])
		{
			u=f[u][i];
			v=f[v][i];
		}
	}
	return f[u][0];
}
int query(int u,int k)
{
	int k1=k/2,k2=k/2;
	if(k%2) k2++;
	return lca(a[u][k1],a[u+k1][k2]);
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	n=read();
	for(int i=1;i<n;i++)
	{
		u=read(),v=read();
		e[u].push_back(v);
		e[v].push_back(u);
	}
	dfs(1,0);
	for(int i=1;i<=n;i++) a[i][1]=i;
	for(int k=2;k<=n;k++)
	{
		for(int i=1;i+k-1<=n;i++)
		{
			a[i][k]=query(i,k);
		}
	}
	q=read();
	while(q--)
	{
		l=read(),r=read(),k=read();
		int ans=0;
		for(int len=k;len<=n;len++)
		{
			for(int i=l;i+len-1<=r;i++)
			{
				ans=max(ans,dep[a[i][k]]);
			}
		}
		cout<<ans<<"\n";
	}
	return 0;
}
