#include<bits/stdc++.h>
using namespace std;
const int N=5e5+88;
int f[N][24];
struct edg {
	int to,nxt;
} edge[N*2];
int dep[N],lug2[N];
int n;
int head[N];
int tot=0;
int g[5003][5003];
void add(int x,int y) {
	++tot;
	edge[tot].to=y;
	edge[tot].nxt=head[x];
	head[x]=tot;
}
void dfs(int x,int fa) {
	dep[x]=dep[fa]+1;
	f[x][0]=fa;
//	cout<<"x="<<x<<"\n";
	for(int i=1; i<=20; i++) {
		f[x][i]=f[f[x][i-1]][i-1];
	}
	for(int i=head[x]; i; i=edge[i].nxt) {
		int to=edge[i].to;
		if(to==fa) continue;
		dfs(to,x);
	}
}
int lca(int x,int y) {
	if(dep[x]<dep[y]) swap(x,y);
	for(int i=20; i>=0; i--) {
		if(dep[x]-(1<<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];
}
namespace sub1 {
	void mainn() {
		for(int i=1; i<=n; i++) {
			int _lca=i;
			for(int j=i; j<=n; j++) {
			//	cout<<i<<" "<<j<<"\n";
				g[i][j]=lca(_lca,j);
				_lca=g[i][j];
			}
		}
		int ans;
		int Q,l,r,k;
		scanf("%d",&Q);
		while(Q--) {
			scanf("%d%d%d",&l,&r,&k);
			ans=0;
			for(int i=l; i+k-1<=r; i++) {
				ans=max(ans,dep[g[i][i+k-1]]);
			}
			printf("%d\n",ans);
		}
	}
}
int d[N];
int main() {
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	lug2[1]=1;

	for(int i=2; i<=n; i++) lug2[i]=lug2[i/2]+1;
	int u,v;
	bool link=1;
	for(int i=1; i<n; i++) {
		scanf("%d%d",&u,&v);
		d[u]++,d[v]++;
		add(u,v),add(v,u);
		if(max(d[u],d[v])>2) link=0;
	}
	dfs(1,0);//	cout<<"www\n";
	if(n<=5000) {
		sub1::mainn();
	}
/*	else if(link)
	{
		sub2::mainn();
	}*/
}
