#include <bits/stdc++.h>
using namespace std;
#define FILE "SHIP"

#define int long long
#define ii pair<int, int>

#define fast ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define FOR(I, L, R) for(int I = (int)L; I <= (int)R; I++)
#define FOD(I, R, L) for(int I = (int)R; I >= (int)L; I--)
#define FOA(I, A) for(auto &I : A)

#define all(A) A.begin(), A.end()
#define fi first
#define se second

const int N = 2e5 + 10;
const int oo = 1e18;
const int mod = 1e9 + 7;

int n, q;
vector<int> g[N];
int lazy[N];
int c;
int h[N], up[N][20];


void dfs(int u, int p){
     FOA(v, g[u]) if(v != p){
          h[v] = h[u] + 1;
          up[v][0] = u;

          FOR(i, 1, 18){
               up[v][i] = up[up[v][i - 1]][i - 1];
          }

          dfs(v, u);
     }
}

int lca(int u, int v){
     if(h[u] > h[v]) swap(u, v);

     int c = h[v] - h[u];

     FOR(i, 0, 18){
          if(c >> i & 1){
               v = up[v][i];
          }
     }

     if(v == u) return u;

     FOR(i, 0, 18){
          if(up[u][i] == up[v][i]) continue;

          u = up[u][i];
          v = up[v][i];
     }

     return up[u][0];
}

int ans;
void dp(int u, int p){
     FOA(v, g[u]) if(v != p){
          dp(v, u);
          if(lazy[v] == 0) ans++;
          lazy[u] += lazy[v];
     }
}

signed main(){ fast
     if(fopen(FILE ".INP", "r")){
          freopen(FILE".INP", "r", stdin);
          freopen(FILE".OUT", "w", stdout);
     }

     cin >> n;
     FOR(i, 1, n - 1){
          int u, v;
          cin >> u >> v;
          g[u].push_back(v);
          g[v].push_back(u);
     }
     dfs(1, 0);

     cin >> q;
     while(q--){
          int u, v;
          cin >> u >> v;

          lazy[u]++;
          lazy[v]++;
          lazy[lca(u, v)] -= 2;
     }
     dp(1, 0);

     cout << ans;
}
