import sys
sys.setrecursionlimit(10**8)
def resolve():
import math
class DoublingLCA:
"""
construct: O(NlogN)
query O(logN)
"""
def __init__(self,edges,root=0):
"""
:param list of (list of int) edges:
:param int root=0:
"""
self.edges = edges
self.n = len(edges)
self.logn = (self.n-1).bit_length()
self.depths = [-1] * self.n
self.parents = [[-1] * self.logn for _ in range(self.n)]
# construct
self.__dfs(-1,root,0)
self.__doubling()
def __dfs(self,par,cur,dep):
self.depths[cur]=dep
self.parents[cur][0]=par
for v in self.edges[cur]:
if v!=par:
self.__dfs(cur,v,dep+1)
def __doubling(self):
for i in range(1,self.logn):
for v in range(self.n):
if self.parents[v][i-1] < 0: # 親が存在しないとき。-1を通すとlistの末尾を取得してしまう
continue
self.parents[v][i]=self.parents[self.parents[v][i-1]][i-1]
def get(self, u, v):
# 深さを合わせる
dd=self.depths[v]-self.depths[u]
if dd<0:
u, v = v, u
dd*=-1
for i in range(self.logn):
if dd&(1<<i):
v = self.parents[v][i]
if v==u: return v # 高さ揃えた時点で一致してたら終わり
# にぶたん
for i in reversed(range(self.logn)):
pu,pv=self.parents[u][i],self.parents[v][i]
if pu!=pv:
u,v=pu,pv
return self.parents[u][0]
# input
N = int(input())
XY = [list(map(int, input().split())) for _ in range(N-1)]
Q = int(input())
AB = [list(map(int, input().split())) for _ in range(Q)]
edges = [[] for _ in range(N)]
for x, y in XY:
edges[x-1].append(y-1)
edges[y-1].append(x-1)
lca = DoublingLCA(edges)
for u,v in AB:
u=u-1
v=v-1
print(lca.depths[u]+lca.depths[v]-2*lca.depths[lca.get(u,v)]+1)
resolve()