#include<iostream>
using namespace std;

long long d[1000050];
int head[1000500],n,size;

struct edge
{
	int to,next;
	long long val;
}e[1000050];

void addedge(int u,int v,long long w)
{
	e[++size].to=v;
	e[size].val=w;
	e[size].next=head[u];
	head[u]=size;
}

void dfs(int u,int fa)
{
	for(int i=head[u]; i; i=e[i].next)
	{
		int to=e[i].to;
		if(to==fa)continue;
		d[to]=d[u]+e[i].val;
		dfs(to,u);
	}
}

int main()
{
	cin>>n;
	for(int i=1; i<n; i++)
	{
		long long u,v,w;
		cin>>u>>v>>w;
		addedge(u,v,w);
		addedge(v,u,w);
	}
	int q,k;
	cin>>q>>k;
	dfs(k,0);
	for(int i=1; i<=q; i++)
	{
		int x,y;
		cin>>x>>y;
		printf("%lld\n",d[x]+d[y]);
	}
	return 0;
}