#include<bits/stdc++.h>
using namespace std;
struct nd{
	int to,nxt;
}li[1000002];
int ind[500002],ptr;
void add(int x,int y)
{
	li[++ptr]=((nd){y,ind[x]});
	ind[x]=ptr;
}
int n,q;
int lgs[500002];
int dep[500002];
int lca[500002][22];
void gd(int x,int fa)
{
	dep[x]=dep[fa]+1;
	lca[x][0]=fa; 
	for(int i=ind[x];i!=-1;i=li[i].nxt)
	{
		if(li[i].to!=fa)
		{
			gd(li[i].to,x);
		}
	}
}
void gl()
{
	for(int j=1;j<=log(n)/log(2);j++)
	{
		for(int i=1;i<=n;i++)
		{
			lca[i][j]=lca[lca[i][j-1]][j-1];
		}
	}
}
int fl(int x,int y)
{
	if(dep[x]>dep[y])
	{
		while(dep[x]>dep[y])
		{
			x=lca[x][0];
		}
	}else{
		while(dep[x]<dep[y])
		{
			y=lca[y][0];
		}
	}
	while(x!=y)
	{
		x=lca[x][0],y=lca[y][0];
	}
	return dep[x];
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	int x,y,z;
	memset(ind,-1,sizeof(ind));
	for(int i=1;i<n;i++)
	{
		scanf("%d %d",&x,&y);
		add(x,y);
		add(y,x);
	}
	gd(1,0);
	gl();
	cin>>q;
	int ans=0;
	while(q--)
	{
		scanf("%d %d %d",&x,&y,&z);
		ans=0;
		if(z==1)
		{
			for(int i=x;i<=y;i++)
			{
				ans=max(ans,dep[i]);
			}
		}else{
			for(int j=z;j<=y-x+1;j++)
			{
				for(int i=x;i+j-1<=y;i++)
				{
					ans=max(ans,fl(i,i+j-1));
				}
			}
			
		}
		printf("%d\n",ans);
	}
	return 0;
}
/*
500000=2^19

6
5 6
6 1
6 2
2 3
2 4
3 
2 5 2
1 4 1
1 6 3

5
1 2
2 3
3 4
4 5
2
1 5 3
2 4 2

The end.
*/
