import sys

from collections import deque

sys.setrecursionlimit(10 ** 6)

input = sys.stdin.readline

n = int(eval(input()))

m = {}

np = [deque([]) for _ in range(n)]

for _ in range(n-1):

    a, b, c = [int(x) for x in input().strip().split()]

    m[(a, b)] = c

    m[(b, a)] = c

    np[a-1].append(b)

    np[b-1].append(a)



q, k = [int(x) for x in input().strip().split()]

master = [-1 for _ in range(n)]

master[k-1] = 0



def dfs(cur, pre, master):

    #print('cur = {}, pre = {}'.format(cur, pre))

    for p in np[cur-1]:

        if p == pre:

            continue

        master[p-1] = master[cur-1] + m[(cur, p)]

        dfs(p, cur, master)



dfs(k, -1, master)



for _ in range(q):

    x, y = [int(x) for x in input().strip().split()]

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

from collections import deque

sys.setrecursionlimit(10 ** 6)

input = sys.stdin.readline

N = int(eval(input()))

p = [deque([]) for _ in range(N)]



for i in range(N-1):

    a, b, c = [int(x) for x in input().strip().split()]

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

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



Q, K = [int(x) for x in input().strip().split()]



c = [-1] * N

f = [False] * N



def search(cp, cost):

    f[cp-1] = True

    for np, cos in p[cp-1]:

        if f[np-1]:

            continue

        c[np-1] = cost + cos

        f[np-1] = True

        search(np, cost + cos)



search(K, 0)

for q in range(Q):

    x, y = [int(x) for x in input().strip().split()]

    print((c[x-1]+c[y-1]))
import sys
from collections import deque

sys.setrecursionlimit(10**6)
input = sys.stdin.readline
n = int(eval(input()))
m = {}
np = [deque([]) for _ in range(n)]
for _ in range(n - 1):
    a, b, c = [int(x) for x in input().strip().split()]
    m[(a, b)] = c
    m[(b, a)] = c
    np[a - 1].append(b)
    np[b - 1].append(a)
q, k = [int(x) for x in input().strip().split()]
master = [-1 for _ in range(n)]
master[k - 1] = 0


def dfs(cur, pre, master):
    # print('cur = {}, pre = {}'.format(cur, pre))
    for p in np[cur - 1]:
        if p == pre:
            continue
        master[p - 1] = master[cur - 1] + m[(cur, p)]
        dfs(p, cur, master)


dfs(k, -1, master)
for _ in range(q):
    x, y = [int(x) for x in input().strip().split()]
    print((master[x - 1] + master[y - 1]))

import sys
from collections import deque

sys.setrecursionlimit(10**6)
input = sys.stdin.readline
N = int(eval(input()))
p = [deque([]) for _ in range(N)]
for i in range(N - 1):
    a, b, c = [int(x) for x in input().strip().split()]
    p[a - 1].append((b, c))
    p[b - 1].append((a, c))
Q, K = [int(x) for x in input().strip().split()]
c = [-1] * N
f = [False] * N


def search(cp, cost):
    f[cp - 1] = True
    for np, cos in p[cp - 1]:
        if f[np - 1]:
            continue
        c[np - 1] = cost + cos
        f[np - 1] = True
        search(np, cost + cos)


search(K, 0)
for q in range(Q):
    x, y = [int(x) for x in input().strip().split()]
    print((c[x - 1] + c[y - 1]))

-n = int(eval(input())) -m = {} -np = [deque([]) for _ in range(n)] -for _ in range(n - 1): +N = int(eval(input())) +p = [deque([]) for _ in range(N)] +for i in range(N - 1): -    m[(a, b)] = c -    m[(b, a)] = c -    np[a - 1].append(b) -    np[b - 1].append(a) -q, k = [int(x) for x in input().strip().split()] -master = [-1 for _ in range(n)] -master[k - 1] = 0 +    p[a - 1].append((b, c)) +    p[b - 1].append((a, c)) +Q, K = [int(x) for x in input().strip().split()] +c = [-1] * N +f = [False] * N -def dfs(cur, pre, master): -    # print('cur = {}, pre = {}'.format(cur, pre)) -    for p in np[cur - 1]: -        if p == pre: +def search(cp, cost): +    f[cp - 1] = True +    for np, cos in p[cp - 1]: +        if f[np - 1]: -        master[p - 1] = master[cur - 1] + m[(cur, p)] -        dfs(p, cur, master) +        c[np - 1] = cost + cos +        f[np - 1] = True +        search(np, cost + cos) -dfs(k, -1, master) -for _ in range(q): +search(K, 0) +for q in range(Q): -    print((master[x - 1] + master[y - 1])) +    print((c[x - 1] + c[y - 1]))