# !入力

# グラフの構築

# クエリの入力

# Kからの各点のの距離をdfs

# クエリの処理

from collections import deque

n=int(eval(input()))

edge=[[]for _ in range(n)]

for i in range(n-1):

  a,b,c=list(map(int,input().split()))

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

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

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

dist=[0]*n

seen=[False]*n

todo=deque([k-1])

while todo:

  par=todo.pop()

  seen[par]=True

  for cld,cost in edge[par]:

    if dist[cld]==0:

      if seen[cld]==False:

        dist[cld]=dist[par]+cost

        seen[cld]=True

        todo.append(cld)



for i in range(q):

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

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

  

  
# !入力

# グラフの構築

# クエリの入力

# Kからの各点のの距離をdfs

# クエリの処理

from collections import deque

n=int(eval(input()))

edge=[[]for _ in range(n)]

for i in range(n-1):

  a,b,c=list(map(int,input().split()))

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

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

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

dist=[0]*n

seen=[False]*n

todo=deque([k-1])

while todo:

  par=todo.popleft()

  seen[par]=True

  for cld,cost in edge[par]:

    if dist[cld]==0:

      if seen[cld]==False:

        dist[cld]=dist[par]+cost

        seen[cld]=True

        todo.append(cld)



for i in range(q):

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

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

  

  
# !入力
# グラフの構築
# クエリの入力
# Kからの各点のの距離をdfs
# クエリの処理
from collections import deque

n = int(eval(input()))
edge = [[] for _ in range(n)]
for i in range(n - 1):
    a, b, c = list(map(int, input().split()))
    edge[a - 1].append((b - 1, c))
    edge[b - 1].append((a - 1, c))
q, k = list(map(int, input().split()))
dist = [0] * n
seen = [False] * n
todo = deque([k - 1])
while todo:
    par = todo.pop()
    seen[par] = True
    for cld, cost in edge[par]:
        if dist[cld] == 0:
            if seen[cld] == False:
                dist[cld] = dist[par] + cost
                seen[cld] = True
                todo.append(cld)
for i in range(q):
    x, y = list(map(int, input().split()))
    print((dist[x - 1] + dist[y - 1]))

# !入力
# グラフの構築
# クエリの入力
# Kからの各点のの距離をdfs
# クエリの処理
from collections import deque

n = int(eval(input()))
edge = [[] for _ in range(n)]
for i in range(n - 1):
    a, b, c = list(map(int, input().split()))
    edge[a - 1].append((b - 1, c))
    edge[b - 1].append((a - 1, c))
q, k = list(map(int, input().split()))
dist = [0] * n
seen = [False] * n
todo = deque([k - 1])
while todo:
    par = todo.popleft()
    seen[par] = True
    for cld, cost in edge[par]:
        if dist[cld] == 0:
            if seen[cld] == False:
                dist[cld] = dist[par] + cost
                seen[cld] = True
                todo.append(cld)
for i in range(q):
    x, y = list(map(int, input().split()))
    print((dist[x - 1] + dist[y - 1]))

-    par = todo.pop() +    par = todo.popleft()