#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#define in insert
#define pb push_back
vector<pair<ll,ll>>graph[50001];
vector<ll>v(5);
vector<ll>dist;
void djikstra(ll v){
priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>>pq;
pq.push({0,v});
dist[v]=0;
pair<ll,ll>p;
while(!pq.empty()){
p=pq.top();
pq.pop();
ll node=p.second;
for(pair<ll,ll> edge : graph[node]){
ll to=edge.first;
ll cost=edge.second;
if(dist[node]+cost<dist[to]){
dist[to]=dist[node]+cost;
pq.push({dist[to],to});
}
}
}
}
void solve(){
ll n;
cin>>n;
ll u,s,w;
for(int i=1;i<n;i++){
cin>>u>>s>>w;
graph[u].pb({s,w});
graph[s].pb({u,w});
}
ll q;
cin>>q;
while(q--){
ll ans=0;
for(int i=0;i<5;i++){
cin>>v[i];
}
dist.assign(n+1,LLONG_MAX);
djikstra(v[0]);
for(int i=0;i<=4;i++){
ans=max(ans,dist[v[i]]);
}
cout<<ans<<'\n';
}
}
int main(){
solve();
return 0;
}