#include<bits/stdc++.h>
using namespace std;
vector<vector<int> >g(52);
int edgenum[52][52], edgemask[52], par[52];
void dfs(int v, int p){
    par[v] = p;
    for(int i = 0; i < g[v].size(); i++){
        int to = g[v][i];
        if(to == p){
            continue;
        }
        dfs(to, v);
    }
}
void calc(int src, int des, int num){
    dfs(src, 0);
    int v = des;
    while(v != src){
        int u = par[v];
        edgemask[edgenum[v][u]] |= (1 << num);
        v = u;
    }
}
int n, m;
long long dp[51][(1 << 20) + 2];
long long solve(int pos, int mask){
    if(pos == n){
        if(__builtin_popcount(mask) == m){
            return 1;
        }
        return 0;
    }
    if(dp[pos][mask] != -1){
        return dp[pos][mask];
    }
    dp[pos][mask] = solve(pos + 1, mask) + solve(pos + 1, mask | edgemask[pos]);
    return dp[pos][mask];
}
int main(){
    cin >> n;
    for(int i = 1; i < n; i++){
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
        edgenum[u][v] = i;
        edgenum[v][u] = i;
    }
    cin >> m;
    for(int i = 0; i < m; i++){
        int u, v;
        cin >> u >> v;
        calc(u, v, i);
    }
    memset(dp, -1, sizeof(dp));
    cout << solve(1, 0);
    return 0;
}