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:
import sys
input = sys.stdin.readline

#立っている場所の個数
def popcnt(n):
    c = (n & 0x5555555555555555) + ((n>>1) & 0x5555555555555555)
    c = (c & 0x3333333333333333) + ((c>>2) & 0x3333333333333333)
    c = (c & 0x0f0f0f0f0f0f0f0f) + ((c>>4) & 0x0f0f0f0f0f0f0f0f)
    c = (c & 0x00ff00ff00ff00ff) + ((c>>8) & 0x00ff00ff00ff00ff)
    c = (c & 0x0000ffff0000ffff) + ((c>>16) & 0x0000ffff0000ffff)
    c = (c & 0x00000000ffffffff) + ((c>>32) & 0x00000000ffffffff)
    return c

def main():
    n = int(input())
    edge = [[] for i in range(n)]
    for _ in [0]*(n-1):
        a,b = map(int,input().split())
        edge[a-1].append(b-1)
        edge[b-1].append(a-1)
    
    m = int(input())
    dg = 100
    uv = []
    for _ in [0]*m:
        u,v = map(int,input().split())
        uv.append(u*dg-dg+v-1)

    #各点の親を求める
    par = [-2]*n
    root = 0
    par[0] = -1

    tank = [0]
    order = []
    orderIdx = [0]*n
    cnt = 0
    while tank:
        now = tank.pop()
        for nxt in edge[now]:
            if par[nxt] == -2:
                par[nxt] = now
                tank.append(nxt)
        order.append(now)
        orderIdx[now] = cnt
        cnt += 1
    
    res = pow(2,n-1)
    #1ビットだけ立っているもの
    bitOne = set()
    for i in range(m):
        bitOne.add(1<<i)

    #dp
    dp = [0]*(1<<m)
    for i in range(1,1<<m):
        pc = popcnt(i)
        if pc == 1:
            #idx:iで立っているbitの内最後のもののindex
            idx = (-i&i).bit_length()-1
            
            u,v = uv[idx]//dg,uv[idx]%dg

            
            #u,v間の経路の辺を立てたものがdp[i]
            tmp = 0
            while u != v:
                if orderIdx[u] < orderIdx[v]:
                    tmp |= (1<<v)
                    v = par[v]
                else:
                    tmp |= (1<<u)
                    u = par[u]
            dp[i] = tmp
        
        else:
            dp[i] = dp[(-i)&i] | dp[((-i)&i)^i]
    
        res += (-1)**(pc%2)*pow(2,n-1-popcnt(dp[i]))

    print(res)

if __name__ == '__main__':
    main()