Problem: We have a tree with N vertices numbered 1 to N. The i-th edge in this tree connects Vertex a_i and Vertex b_i.
Consider painting each of these edges white or black. There are 2^{N-1} such ways to paint the edges. Among them, how many satisfy all of the following M restrictions?

* The i-th (1 \leq i \leq M) restriction is represented by two integers u_i and v_i, which mean that the path connecting Vertex u_i and Vertex v_i must contain at least one edge painted black.

Constraints

* 2 \leq N \leq 50
* 1 \leq a_i,b_i \leq N
* The graph given in input is a tree.
* 1 \leq M \leq \min(20,\frac{N(N-1)}{2})
* 1 \leq u_i < v_i \leq N
* If i \not= j, either u_i \not=u_j or v_i\not=v_j
* All values in input are integers.

Input

Input is given from Standard Input in the following format:


N
a_1 b_1
:
a_{N-1} b_{N-1}
M
u_1 v_1
:
u_M v_M


Output

Print the number of ways to paint the edges that satisfy all of the M conditions.

Examples

Input

3
1 2
2 3
1
1 3


Output

3


Input

2
1 2
1
1 2


Output

1


Input

5
1 2
3 2
3 4
5 3
3
1 3
2 4
2 5


Output

9


Input

8
1 2
2 3
4 3
2 5
6 3
6 7
8 6
5
2 7
3 5
1 6
2 8
7 8


Output

62

Solution (in PYTHON3):

Solution:
from collections import deque
def solve(s, t):
    par = {}
    par[s] = -1
    q = deque([s])
    while q:
        v = q.pop()
        for nxt_v in tree[v]:
            if nxt_v in par:
                continue
            else:
                q.append(nxt_v)
                par[nxt_v] = v
    res = []
    while True:
        if par[t] != -1:
            res.append(edge[min(t, par[t]), max(t, par[t])])
            t = par[t]
        else:
            return res
    
n = int(input())
info = [list(map(int, input().split())) for i in range(n - 1)]
m = int(input())
const = [list(map(int, input().split())) for i in range(m)]

tree = [[] for i in range(n)]
edge = {}
for i in range(n - 1):
    a, b = info[i]
    a -= 1
    b -= 1
    edge[min(a, b), max(a, b)] = i
    tree[a].append(b)
    tree[b].append(a)
    
bit_v = [0] * m
for i in range(m):
    s, t = const[i]
    s -= 1
    t -= 1
    bit_state = 0
    for mask in solve(s, t):
        bit_state |= (1 << mask)
    bit_v[i] = bit_state

ans = 0
for bit_state in range(1, 1 << m):
    bit_cnt = bin(bit_state).count("1")
    mask = 0
    for i in range(m):
        if bit_state & (1 << i):
            mask |= bit_v[i]
    if bit_cnt % 2 == 0:
        ans -= 2 ** (n - 1 - bin(mask).count("1"))
    else:
        ans += 2 ** (n - 1 - bin(mask).count("1"))
print(2 ** (n - 1) - ans)