#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mkp make_pair
#define fir first
#define sec second
const int N = 5e5+5;
int n,q;
vector<int>e[N];
int f[N][20],dep[N];
int d[N],id[N];
void dfs(int u,int fa)
{
dep[u] = dep[f[u][0] = fa] + 1;
for(int i = 1;i < 20;i++) f[u][i] = f[f[u][i-1]][i-1];
for(auto v:e[u]) if(v != fa) dfs(v,u);
}
int LCA(int x,int y)
{
if(dep[x] < dep[y]) swap(x,y);
for(int i = 19;i >= 0;i--) if(dep[f[x][i]] >= dep[y]) x = f[x][i];
if(x == y) return x;
for(int i = 19;i >= 0;i--) if(f[x][i] != f[y][i]) x = f[x][i],y = f[y][i];
return f[x][0];
}
bool cmp(int i,int j){return d[i] > d[j];}
vector< pair<int,int> >vec[N],vec2[N];
vector< int >p[N],p2[N];
int tr[N<<2];
int ans[N];
int L[N],R[N],K[N];
set<int>st;
void Ins(int l,int r,int c){vec[r].push_back(mkp(l,c)),vec2[r-l+1].push_back(mkp(r,c));}
void Upd(int c,int l,int r,int x,int y)
{
tr[c] = max(tr[c],y);
if(l == r) return ;
int mid = (l+r)>>1;
if(x <= mid) Upd(c<<1,l,mid,x,y);
if(x > mid) Upd(c<<1|1,mid+1,r,x,y);
}
int Qry(int c,int l,int r,int ql,int qr)
{
if(ql <= l && qr >= r) return tr[c];
int mid = (l+r>>1),res = 0;
if(ql <= mid) res = max(res,Qry(c<<1,l,mid,ql,qr));
if(qr > mid) res = max(res,Qry(c<<1|1,mid+1,r,ql,qr));
return res;
}
int main()
{
freopen("query.in","r",stdin);
freopen("query.out","w",stdout);
ios::sync_with_stdio(false);cin.tie(0);
cin>>n;
for(int i = 1,u,v;i < n;i++)
{
cin>>u>>v;
e[u].pb(v),e[v].pb(u);
}
for(int i = 0;i <= n;i++) st.insert(i);
dfs(1,0);
for(int i = 1;i < n;i++)
d[i] = dep[LCA(i,i+1)],id[i] = i;
sort(id+1,id+n,cmp);
for(int i = 1;i <= n;i++) Ins(i,i,dep[i]);
cin>>q;
for(int i = 1;i <= q;i++)
{
cin>>L[i]>>R[i]>>K[i];
p[R[i]].push_back(i);
p2[K[i]].push_back(i);
}
for(int i = 1;i < n;i++)
{
auto it = st.find(id[i]);
int pre = *prev(it),nxt = *next(it);
st.erase(id[i]);
Ins(pre+1,nxt,d[id[i]]);
}
for(int i = n;i;i--)
{
for(auto x:vec[i]) Upd(1,1,n,x.fir,x.sec);
for(auto x:p[i]) ans[x] = Qry(1,1,n,1,R[x]-K[x]+1);
}
memset(tr,0,sizeof(tr));
for(int i = n;i;i--)
{
for(auto x:vec2[i]) Upd(1,1,n,x.fir,x.sec);
for(auto x:p2[i]) ans[x] = max(ans[x],Qry(1,1,n,L[x]+K[x]-1,R[x]));
}
for(int i = 1;i <= q;i++) cout<<ans[i]<<"\n";
return 0;
}