#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define N 1001000
ll n,u,v,q,head[N],cnt,dep[N],fa[N][25];
ll lc[5005][5005],l,r,k,ans;
bool subA;
struct node
{
    ll nxt,to;
}e[N];
void add(ll u,ll v)
{
    e[++cnt].to=v;
    e[cnt].nxt=head[u];
    head[u]=cnt;
}
template<typename T>inline void read(T &x)
{
    bool f=1;x=0;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=!f;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    x=(f?x:-x);return;
}
template<typename T>inline void write(T x)
{
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
    return;
}
void dfs(ll u,ll f)
{
    dep[u]=dep[f]+1;
    fa[u][0]=f;
    for(int i=1;(1<<i)<=dep[u];i++) fa[u][i]=fa[fa[u][i-1]][i-1];
    for(int i=head[u];i;i=e[i].nxt)
    {
        ll v=e[i].to;
        if(v==f) continue;
        dfs(v,u);
    }
}
ll lca(ll x,ll y)
{
    if(dep[x]<dep[y]) swap(x,y);
    for(int i=20;i>=0;i--) if(dep[fa[x][i]]>=dep[y]) x=fa[x][i];
    if(x==y) return x;
    for(int i=20;i>=0;i--) if(fa[x][i]!=fa[y][i]) x=fa[x][i],y=fa[y][i];
    return fa[x][0];
}
int main()
{
    freopen("query.in","r",stdin);
    freopen("query.out","w",stdout);
    read(n);
    for(int i=1;i<n;i++)
    {
        read(u),read(v);
        add(u,v);
        add(v,u);
    }
    dfs(1,0);
    for(int i=1;i<=n;i++) lc[i][i]=i;
    for(int len=2;len<=n;len++)
    {
        for(int l=1;l+len-1<=n;l++)
        {
            ll r=l+len-1;
            lc[l][r]=lca(lc[l+1][r],lc[l][r-1]);
        }
    }
    read(q);
    for(int i=1;i<=q;i++)
    {
        ans=0;
        read(l),read(r),read(k);
        for(int now=l;now+k-1<=r;now++) ans=max(ans,dep[lc[now][now+k-1]]);
        write(ans);
        puts("");
    }
    return 0;
}