def Q4(x):

    N = x[0][0]  # 木の頂点数

    edge = x[1:N][:]  # 辺とその距離

    Q = x[N][0]  # クエリ数

    K = x[N][1]  # 経由すべき頂点の番号

    query = x[N + 1:][:]  # クエリの内容



    # 木の初期化

    tree = list(range(N))  # adjacent(隣接)のほうがいいかな？

    for idx in range(N):

        tree[idx] = []



    for idx in range(len(edge)):

        # i番目の要素は、節点iに接続されている節点

        # これ以降、-1を足すのは、頂点の添字が1スタートに対しリストは0スタートのため

        a = edge[idx][0] - 1

        b = edge[idx][1] - 1

        c = edge[idx][2]

        tree[a].append([b, c])

        tree[b].append([a, c])



    # Kから各節点への距離を求める

    dist = [0 for i in range(N)]  # 頂点Kからの距離

    isVisit = [False for i in range(N)]  # ある頂点が探索済か

    queue = [K - 1] #幅探索用キュー

    isVisit[K - 1] = True



    while queue:

        u = queue.pop()

        for p in tree[u]:

            v, w = list(map(int, p))

            if not isVisit[v]:

                isVisit[v] = True

                dist[v] = dist[u] + w

                queue.append(v)



    for q in query:

        print((dist[q[0] - 1] + dist[q[1] - 1]))

        

N=int(eval(input()))

edge = [[int(i) for i in input().split()] for i in range(N-1)]

Q , K = (int(i) for i in input().split())

query = [[int(i) for i in input().split()] for i in range(Q)]

l = [[N]]+edge+[[Q,K]]+query

Q4(l)
def d_transit_tree_path(N, E, Q, K, V):

    # 頂点数、辺とそのコスト、クエリの数、経由する頂点、出発/到達頂点



    # 隣接リストの作成

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

    for a, b, c in E:

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

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



    # Kから各節点への距離を求める

    dist = [0 for i in range(N)]  # 頂点Kからの距離

    is_visit = [False for i in range(N)]  # ある頂点が探索済か

    is_visit[K - 1] = True  # 頂点Kは探索済とする

    queue = [K - 1]  # 幅探索用キュー



    while queue:

        u = queue.pop()

        for v, c in edge[u]:

            if not is_visit[v]:

                is_visit[v] = True

                dist[v] = dist[u] + c

                queue.append(v)



    ans = ''

    for q1, q2 in V:

        ans += '{}\n'.format(dist[q1 - 1] + dist[q2 - 1])

    ans = ans[:-1]

    return ans



N = int(eval(input()))

E = [[int(i) for i in input().split()] for j in range(N-1)]

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

V = [[int(i) for i in input().split()] for j in range(Q)]

print((d_transit_tree_path(N, E, Q, K, V)))
def Q4(x):
    N = x[0][0]  # 木の頂点数
    edge = x[1:N][:]  # 辺とその距離
    Q = x[N][0]  # クエリ数
    K = x[N][1]  # 経由すべき頂点の番号
    query = x[N + 1 :][:]  # クエリの内容
    # 木の初期化
    tree = list(range(N))  # adjacent(隣接)のほうがいいかな？
    for idx in range(N):
        tree[idx] = []
    for idx in range(len(edge)):
        # i番目の要素は、節点iに接続されている節点
        # これ以降、-1を足すのは、頂点の添字が1スタートに対しリストは0スタートのため
        a = edge[idx][0] - 1
        b = edge[idx][1] - 1
        c = edge[idx][2]
        tree[a].append([b, c])
        tree[b].append([a, c])
    # Kから各節点への距離を求める
    dist = [0 for i in range(N)]  # 頂点Kからの距離
    isVisit = [False for i in range(N)]  # ある頂点が探索済か
    queue = [K - 1]  # 幅探索用キュー
    isVisit[K - 1] = True
    while queue:
        u = queue.pop()
        for p in tree[u]:
            v, w = list(map(int, p))
            if not isVisit[v]:
                isVisit[v] = True
                dist[v] = dist[u] + w
                queue.append(v)
    for q in query:
        print((dist[q[0] - 1] + dist[q[1] - 1]))


N = int(eval(input()))
edge = [[int(i) for i in input().split()] for i in range(N - 1)]
Q, K = (int(i) for i in input().split())
query = [[int(i) for i in input().split()] for i in range(Q)]
l = [[N]] + edge + [[Q, K]] + query
Q4(l)

def d_transit_tree_path(N, E, Q, K, V):
    # 頂点数、辺とそのコスト、クエリの数、経由する頂点、出発/到達頂点
    # 隣接リストの作成
    edge = [[] for _ in range(N)]
    for a, b, c in E:
        edge[a - 1].append([b - 1, c])
        edge[b - 1].append([a - 1, c])
    # Kから各節点への距離を求める
    dist = [0 for i in range(N)]  # 頂点Kからの距離
    is_visit = [False for i in range(N)]  # ある頂点が探索済か
    is_visit[K - 1] = True  # 頂点Kは探索済とする
    queue = [K - 1]  # 幅探索用キュー
    while queue:
        u = queue.pop()
        for v, c in edge[u]:
            if not is_visit[v]:
                is_visit[v] = True
                dist[v] = dist[u] + c
                queue.append(v)
    ans = ""
    for q1, q2 in V:
        ans += "{}\n".format(dist[q1 - 1] + dist[q2 - 1])
    ans = ans[:-1]
    return ans


N = int(eval(input()))
E = [[int(i) for i in input().split()] for j in range(N - 1)]
Q, K = [int(i) for i in input().split()]
V = [[int(i) for i in input().split()] for j in range(Q)]
print((d_transit_tree_path(N, E, Q, K, V)))

-def Q4(x): -    N = x[0][0]  # 木の頂点数 -    edge = x[1:N][:]  # 辺とその距離 -    Q = x[N][0]  # クエリ数 -    K = x[N][1]  # 経由すべき頂点の番号 -    query = x[N + 1 :][:]  # クエリの内容 -    # 木の初期化 -    tree = list(range(N))  # adjacent(隣接)のほうがいいかな？ -    for idx in range(N): -        tree[idx] = [] -    for idx in range(len(edge)): -        # i番目の要素は、節点iに接続されている節点 -        # これ以降、-1を足すのは、頂点の添字が1スタートに対しリストは0スタートのため -        a = edge[idx][0] - 1 -        b = edge[idx][1] - 1 -        c = edge[idx][2] -        tree[a].append([b, c]) -        tree[b].append([a, c]) +def d_transit_tree_path(N, E, Q, K, V): +    # 頂点数、辺とそのコスト、クエリの数、経由する頂点、出発/到達頂点 +    # 隣接リストの作成 +    edge = [[] for _ in range(N)] +    for a, b, c in E: +        edge[a - 1].append([b - 1, c]) +        edge[b - 1].append([a - 1, c]) -    isVisit = [False for i in range(N)]  # ある頂点が探索済か +    is_visit = [False for i in range(N)]  # ある頂点が探索済か +    is_visit[K - 1] = True  # 頂点Kは探索済とする -    isVisit[K - 1] = True -        for p in tree[u]: -            v, w = list(map(int, p)) -            if not isVisit[v]: -                isVisit[v] = True -                dist[v] = dist[u] + w +        for v, c in edge[u]: +            if not is_visit[v]: +                is_visit[v] = True +                dist[v] = dist[u] + c -    for q in query: -        print((dist[q[0] - 1] + dist[q[1] - 1])) +    ans = "" +    for q1, q2 in V: +        ans += "{}\n".format(dist[q1 - 1] + dist[q2 - 1]) +    ans = ans[:-1] +    return ans -edge = [[int(i) for i in input().split()] for i in range(N - 1)] -Q, K = (int(i) for i in input().split()) -query = [[int(i) for i in input().split()] for i in range(Q)] -l = [[N]] + edge + [[Q, K]] + query -Q4(l) +E = [[int(i) for i in input().split()] for j in range(N - 1)] +Q, K = [int(i) for i in input().split()] +V = [[int(i) for i in input().split()] for j in range(Q)] +print((d_transit_tree_path(N, E, Q, K, V)))