from collections import defaultdict, deque import sys sys.setrecursionlimit(10**6) n = int(input()) max_log_v = 30 # 親を2^k回辿って到達する頂点(根を通り過ぎる場合は-1とする) Parent = [[-1 for _ in range(n)] for _ in range(max_log_v)] Depth = [-1 for _ in range(n)] def dfs(curr, prev, d): Parent[0][curr] = prev Depth[curr] = d for np, _ in edge[curr]: if np == prev: continue dfs(np, curr, d + 1) def init(): root = 0 # Parent[0]とDepthを根rootの木として初期化する dfs(root, -1, 0) # Parentを初期化する for i in range(max_log_v - 1): for v in range(n): if Parent[i][v] < 0: Parent[i + 1][v] = -1 else: Parent[i + 1][v] = Parent[i][Parent[i][v]] def check_LCA(u, v): if Depth[u] > Depth[v]: u, v = v, u for i in range(max_log_v): if (Depth[v] - Depth[u]) >> i & 1: v = Parent[i][v] if u == v: return u for i in range(max_log_v - 1, -1, -1): if Parent[i][u] != Parent[i][v]: u = Parent[i][u] v = Parent[i][v] return Parent[0][u] edge = defaultdict(list) for _ in range(n - 1): u, v, w = map(int, input().split()) edge[u].append((v, w)) edge[v].append((u, w)) init() INF = 1 << 60 D = [INF for _ in range(n)] D[0] = 0 Que = deque([(0, 0)]) while Que: curr, d = Que.popleft() for np, w in edge[curr]: if d + w > D[np]: continue D[np] = d + w Que.append((np, d + w)) def dist(u, v): return D[u] + D[v] - 2 * D[check_LCA(u, v)] q = int(input()) for _ in range(q): x, y, z = map(int, input().split()) print((dist(x, y) + dist(y, z) + dist(z, x)) // 2)