#include // #pragma GCC optimize("Ofast") // #pragma GCC optimize("unroll-loops") #define int long long #define ld long double #define vec vector #define all(m) (m).begin(), (m).end() #define forn(i,n) for(int i=0;i<(n);i++) // TIP To Run code, press or click the icon in the gutter. using namespace std; typedef pair pii; int mod = 1e9+7; vec> g; vec p; vec h; void dfs(int v, int hh) { h[v] = hh; for (int u: g[v]) { if (h[u]<0) { p[u] = v; dfs(u,hh+1); } } } struct p3 { int a,b,c; }; void solve() { int n; cin>>n; g.resize(n); forn(i,n-1) { int a,b; cin>>a>>b; g[a].push_back(b); g[b].push_back(a); } int k; cin>>k; vec need(n); forn(i,k) { int v; cin>>v; need[v]++; } forn(i,k) { int v; cin>>v; need[v]--; } p.assign(n,-1); h.assign(n,-1); dfs(0,0); priority_queue pq; queue ans1; stack ans2; forn(i,n) { if (need[i]) pq.push({h[i],i}); } while (!pq.empty()) { int v = pq.top().second; pq.pop(); if (!need[v]) continue; if (!need[p[v]]) pq.push({h[p[v]],p[v]}); if (need[v]>0) { ans1.push({v,p[v],need[v]}); } else { ans2.push({p[v],v,-need[v]}); } need[p[v]] += need[v]; need[v] = 0; } cout<>tt; while (tt--) solve(); return 0; }