#include<bits/stdc++.h>
using namespace std;
int n,G,ne,h[500010],d[500010],f[500010];
struct line{
	int to,nx;
}e[1000010];
void add(int x,int y)
{
	e[++ne].to=y;
	e[ne].nx=h[x];
	h[x]=ne;
}
bool v[500010];
void dfs(int k)
{
	v[k]=1;
	for(int i=h[k];i;i=e[i].nx)
	{
		int to=e[i].to;
		if(!v[to]){
			d[to]=d[k]+1;
			f[to]=k;
			dfs(to);
		}
	}
}
int ff(int a,int b)
{
	if(d[a]>d[b]) swap(a,b);
	while(d[b]>d[a]) b=f[b];
	while(b!=a){
		a=f[a],b=f[b];
	}
	return a;
}
signed main()
{
	ios::sync_with_stdio(0);
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	for(int i=1;i<n;i++)
	{
		int x,y;
		cin>>x>>y;
		add(x,y);add(y,x);
	}
	if(n>=5000){
		d[1]=1;
		dfs(1);
		cin>>G;
		while(G--)
		{
			int x,y,z;
			cin>>x>>y>>z;
			cout<<max(d[x],d[y])-z<<"\n";
		}
	}
	else{
		d[1]=1;
		dfs(1);
		cin>>G;
		while(G--)
		{
			int x,y,z,ans=0;
			cin>>x>>y>>z;
			for(int t=z-1;t<=y-x;t++)
			{
				for(int i=x;i+t<=y;i++)
				{
					int r=i+t;
					for(int j=i;j<i+t;j++)
					{
						r=ff(j,r);
					}
					ans=max(ans,d[r]);
				}
			}
			cout<<ans<<"\n";
		}
	}
	return 0;
}
//I hate all the TREEEEEEEEEEEEEEEEEEEEEEE!
