class LCA: def __init__(self, graph, root=0): self.tree = graph self.root = root self.n = len(graph) self.k = self._get_bit() self.dist = [-1]*self.n self.weight = [0]*self.n self.parent = [[-1]*self.n for _ in range(self.k)] self._dfs() self._doubling() def _get_bit(self): k = 1 while (1<>i&1: u = self.parent[i][u] if u==v: return u for i in reversed(range(self.k)): if self.parent[i][u]!=self.parent[i][v]: u = self.parent[i][u] v = self.parent[i][v] return self.parent[0][u] def get_dist(self, u, v): return self.dist[u]+self.dist[v]-2*self.dist[self.query(u, v)] def get_weight(self, u, v): return self.weight[u]+self.weight[v]-2*self.weight[self.query(u, v)] def is_on_path(self, u, v, a): return self.get_dist(u, a)+self.get_dist(a, v)==self.get_dist(u, v) def kth_ancestor(self, u, k): for i in range(self.k): if (k>>i)&1: u = self.parent[i][u] if u == -1: break return u if __name__=='__main__': n = int(input()) t = [[] for _ in range(n)] for _ in range(n-1): u, v, w = map(int, input().split()) t[u].append((v, w)) t[v].append((u, w)) lca = LCA(t) for _ in range(int(input())): x, y, z = map(int, input().split()) print((lca.get_weight(x, y)+lca.get_weight(y, z)+lca.get_weight(z, x))//2)