n = int(eval(input()))

adj = [[] for _ in range(n)]  # adjacence(隣接)の略



for (a,b,c) in (list(map(int, input().split())) for _ in range(n-1)):

    adj[a-1].append((b-1, c))

    adj[b-1].append((a-1, c))



q, k = list(map(int, input().split()))

k -= 1

dist = [-1]*n  # 経由地から各頂点までのコスト

dist[k] = 0  # 経由地kをスタート地点とするため、コスト0に設定



stack = [k]  # 探索候補。経由地kをスタート地点にするため、先に積んでおく



while stack: # 探索候補がなくなるまで続ける

    now = stack.pop()

    for dest, cost in adj[now]:

        if dist[dest] != -1: # dest(目的地)までのコストがすでに設定されていればスルー

            continue

        dist[dest] = dist[now] + cost # コストを現地点までのコストと合算して算出

        stack.append(dest)



for _ in range(q):

    x, y = list(map(int, input().split()))

    print((dist[x-1] + dist[y-1]))
import sys

input = sys.stdin.readline



n = int(eval(input()))

adj = [[] for _ in range(n)]  # adjacence(隣接)の略



for (a,b,c) in (list(map(int, input().split())) for _ in range(n-1)):

    adj[a-1].append((b-1, c))

    adj[b-1].append((a-1, c))



q, k = list(map(int, input().split()))

k -= 1

dist = [-1]*n  # 経由地から各頂点までのコスト

dist[k] = 0  # 経由地kをスタート地点とするため、コスト0に設定



stack = [k]  # 探索候補。経由地kをスタート地点にするため、先に積んでおく



while stack: # 探索候補がなくなるまで続ける

    now = stack.pop()

    for dest, cost in adj[now]:

        if dist[dest] != -1: # dest(目的地)までのコストがすでに設定されていればスルー

            continue

        dist[dest] = dist[now] + cost # コストを現地点までのコストと合算して算出

        stack.append(dest)



for _ in range(q):

    x, y = list(map(int, input().split()))

    print((dist[x-1] + dist[y-1]))
n = int(eval(input()))
adj = [[] for _ in range(n)]  # adjacence(隣接)の略
for (a, b, c) in (list(map(int, input().split())) for _ in range(n - 1)):
    adj[a - 1].append((b - 1, c))
    adj[b - 1].append((a - 1, c))
q, k = list(map(int, input().split()))
k -= 1
dist = [-1] * n  # 経由地から各頂点までのコスト
dist[k] = 0  # 経由地kをスタート地点とするため、コスト0に設定
stack = [k]  # 探索候補。経由地kをスタート地点にするため、先に積んでおく
while stack:  # 探索候補がなくなるまで続ける
    now = stack.pop()
    for dest, cost in adj[now]:
        if dist[dest] != -1:  # dest(目的地)までのコストがすでに設定されていればスルー
            continue
        dist[dest] = dist[now] + cost  # コストを現地点までのコストと合算して算出
        stack.append(dest)
for _ in range(q):
    x, y = list(map(int, input().split()))
    print((dist[x - 1] + dist[y - 1]))

import sys

input = sys.stdin.readline
n = int(eval(input()))
adj = [[] for _ in range(n)]  # adjacence(隣接)の略
for (a, b, c) in (list(map(int, input().split())) for _ in range(n - 1)):
    adj[a - 1].append((b - 1, c))
    adj[b - 1].append((a - 1, c))
q, k = list(map(int, input().split()))
k -= 1
dist = [-1] * n  # 経由地から各頂点までのコスト
dist[k] = 0  # 経由地kをスタート地点とするため、コスト0に設定
stack = [k]  # 探索候補。経由地kをスタート地点にするため、先に積んでおく
while stack:  # 探索候補がなくなるまで続ける
    now = stack.pop()
    for dest, cost in adj[now]:
        if dist[dest] != -1:  # dest(目的地)までのコストがすでに設定されていればスルー
            continue
        dist[dest] = dist[now] + cost  # コストを現地点までのコストと合算して算出
        stack.append(dest)
for _ in range(q):
    x, y = list(map(int, input().split()))
    print((dist[x - 1] + dist[y - 1]))

+import sys + +input = sys.stdin.readline