#include<bits/stdc++.h>
#define F first
#define S second
using namespace std;
const int N=500005;
int n,q,lg[N*2],po[N],cn,an[N],st[N*2][20],de[N];vector<int>vc[N];
int mn(int x,int y){return de[x]<de[y]?x:y;}
void dfs(int x,int fa){
st[++cn][0]=x;po[x]=cn;de[x]=de[fa]+1;
for(auto y:vc[x])if(y!=fa)dfs(y,x),st[++cn][0]=x;
}
int lca(int x,int y){
x=po[x];y=po[y];if(x>y)swap(x,y);int z=lg[y-x+1];
return mn(st[x][z],st[y-(1<<z)+1][z]);
}
vector<pair<int,int> >ve;
struct nd{int x,y,z;};vector<nd>zp,a[N],b[N],c[N],d[N];
struct no{
int tr[N<<2];
void add(int rt,int l,int r,int x,int y){
if(l==r){tr[rt]=max(tr[rt],y);return;}int md=l+r>>1;
if(x<=md)add(rt<<1,l,md,x,y);else add(rt<<1|1,md+1,r,x,y);
tr[rt]=max(tr[rt<<1],tr[rt<<1|1]);
}
int qr(int rt,int l,int r,int x,int y){
if(x<=l&&r<=y)return tr[rt];int md=l+r>>1;
return max(x<=md?qr(rt<<1,l,md,x,y):0,y>md?qr(rt<<1|1,md+1,r,x,y):0);
}
}g1,g2,g3;
int main(){
freopen("query.in","r",stdin);
freopen("query.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n;
for(int i=1,x,y;i<n;++i)cin>>x>>y,vc[x].push_back(y),vc[y].push_back(x);
dfs(1,0);cin>>q;
for(int i=2;i<=cn;++i)lg[i]=lg[i>>1]+1;
for(int i=1;i<=lg[cn];++i)
for(int j=1;j+(1<<i)-1<=cn;++j)st[j][i]=mn(st[j][i-1],st[j+(1<<i-1)][i-1]);
for(int i=1;i<=n;++i){
pair<int,int>o={0,0};
while(ve.size()&&de[lca(ve.back().F,i)]<de[ve.back().F])o=ve.back(),zp.push_back({o.S,i-1,de[o.F]}),ve.pop_back();
if(ve.size()&&ve.back().F==i);
else{
if(o.F&&(!ve.size()||lca(o.F,i)!=ve.back().F))ve.push_back({lca(o.F,i),o.S});
if(!ve.size()||i!=ve.back().F)ve.push_back({i,i});
}
}
while(ve.size())zp.push_back({ve.back().S,n,de[ve.back().F]}),ve.pop_back();
for(auto i:zp)a[i.y-i.x+1].push_back(i),c[i.y].push_back(i);
for(int i=1,x,y,z;i<=q;++i){
cin>>x>>y>>z;b[z].push_back({x,y,i});d[y].push_back({x,z,i});
}
for(int i=n;i;--i){
for(auto j:a[i])g1.add(1,1,n,j.x,j.z),g2.add(1,1,n,j.y,j.z);
for(auto j:c[i])g3.add(1,1,n,j.x,j.z);
for(auto j:b[i])an[j.z]=max(an[j.z],max(g1.qr(1,1,n,j.x,j.y-i+1),g2.qr(1,1,n,j.x+i-1,j.y)));
for(auto j:d[i])an[j.z]=max(an[j.z],g3.qr(1,1,n,1,j.x));
}
for(int i=1;i<=q;++i)cout<<an[i]<<'\n';
return 0;
}