#include <iostream>
#include <sstream>
#include <vector>
#include <cmath>
#include <ctime>
#include <cassert>
#include <ctype.h>
#include <iomanip>
#include <cstdio>
#include <float.h>
#include <queue>
#include <set>
#include <map>
#include <fstream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <algorithm>
#include <numeric>
#include <stack>
#include <functional>
// #include <pair> 
       
using namespace std;
typedef pair<long long int, long long int> ii;
typedef vector<long long int> vi;
typedef vector<ii> vii;
// #define INF 1000000000000000
       
#define endl '\n'
#define MOD 1000000007
// #define INF 1ll<<30
long long int inf =  100000000000000000;
// #define MAX 100010
 
#define eps 1e-11
#define bit_max 1ll<<32
#define _USE_MATH_DEFINES
 
// long long binpow(long long a,long long b)
// {
//     if (b == 1) return a;
//     long long res = binpow(a, b/2)%MOD;
//     if (b % 2) return (res*((res*a)%MOD))%MOD;
//     else return (res * res)%MOD;
// }
 
// long long int fact(long long int a)
// {
//     if(a==0||a==1)
//         return 1;
//     long long int ans = 1;
//     for(int i=a;i>=1;i--)
//         ans = (ans * i);
//     return ans;
// }
 
// long long int ivmod(long long int a)
// {
//     return binpow(a,MOD-2);
// }
 
// long long int ncr(long long int a,long long int b)
// {
//     long long int pans=1;
//     for(int i =a;i>max(b,a-b);i--)
//         pans=pans*i;
//     long long int div = fact(min(b,a-b));
//     // cout<<ans<<"            "<<div<<endl;
//     pans = pans/div;
//     return pans;
// }


vector< int > dist(100005,inf);


int main()
{
    // ios_base::sync_with_stdio(false);
    // cin.tie(NULL);
    // cout.tie(NULL);
    // #ifndef ONLINE_JUDGE
    // freopen("input.txt","r",stdin);
    // freopen("output.txt","w",stdout);
    // #endif   
    long long int n;
    cin>>n;
    vector< vector < pair<long long int,long long int>  > > vvz(100005);
    for(int i=0;i<n-1;i++)
    {
        long long int a,b;
        cin>>a>>b;
        long long int c;
        cin>>c;

        vvz[a].push_back(make_pair(b,c));
        vvz[b].push_back(make_pair(a,c));
    }
    long long int q,k;
    cin>>q>>k;
    long long int s = k;
    vi dist(n+2, inf); dist[s] = 0;                    
    priority_queue< ii, vector<ii>, greater<ii> > pq; pq.push(ii(0, s));
    while (!pq.empty()) 
    {                                             
        ii front = pq.top(); pq.pop();     
        long long int d = front.first, u = front.second;
        if (d > dist[u]) 
            continue;   
        for (int j = 0; j < (int)vvz[u].size(); j++) 
        {
            ii v = vvz[u][j];                       
            if (dist[u] + v.second < dist[v.first]) 
            {
                dist[v.first] = dist[u] + v.second;                 
                pq.push(ii(dist[v.first], v.first));
            } 
        } 
    }
    // for(int i=0;i<n;i++)
    // {
    //     cout<<dist[i]<<" ";
    // }
    for(int i=0;i<q;i++)
    {
        long long int x,y;
        cin>>x>>y;
        // x--;y--;
        // cout<<dist[x]<<"   "<<dist[y]<<endl;
        long long temp = dist[x]+dist[y];
        cout<<temp;
        cout<<endl;
    }
    return 0;
}

Measured memory_bytes: 11504