#include using namespace std; typedef long long ll; const int N = 1e5 + 5; const ll dt = 0; namespace space_and_Lqy{ ll n, q; vector> b[N]; ll fa[22][N]; ll dis[N], dep[N]; void dfs(ll x, ll faa){ fa[0][x] = faa; dep[x] = dep[faa] + 1; for(int i = 1; i <= 21; i++){ fa[i][x] = fa[i-1][fa[i-1][x]]; } for(auto e : b[x]){ ll v = e[0], w = e[1]; if(v == faa) continue; dis[v] = dis[x] + w; dfs(v, x); } } ll lca(ll u, ll v){ if(dep[u] < dep[v]) swap(u, v); for(int i = 21; i >= 0; i--){ if(dep[fa[i][u]] >= dep[v]){ u = fa[i][u]; } } if(u == v) return u; for(int i = 21; i >= 0; i--){ if(fa[i][u] != fa[i][v]){ u = fa[i][u]; v = fa[i][v]; } } return fa[0][u]; } ll disd(ll x, ll y){ return dis[x] + dis[y] - 2 * dis[lca(x, y)]; } void solve(){ cin >> n; for(int i = 1; i < n; i++){ ll u, v, w; cin >> u >> v >> w; u++, v++; b[u].push_back({v, w}); b[v].push_back({u, w}); } dfs(1, 0); cin >> q; while(q--){ ll x, y, z; cin >> x >> y >> z; x++, y++, z++; cout << (disd(x, y) + disd(y, z) + disd(x, z)) / 2 << endl; } } }; int main(){ ll T = 1; if(dt)cin >> T; while(T--){ space_and_Lqy::solve(); } return 0; }