#include using namespace std; using ll = long long; using vi = vector; using vvi = vector>; using pii = pair; using vll = vector; using str = string; using vstr = vector; #define PB push_back #define ALL(x) (x).begin() (x).end() #define FOR(i,s,f) for(int (i) = (s); i < (f); i++) int main(){ int n; cin >>n; vector> mp(n); vector> precom(n); FOR(i,0,n-1){ int x,y; cin >>x>>y; mp[x].insert(y); mp[y].insert(x); } vi zaciatok(n); vi koniec(n); int zas; cin >>zas; FOR(i,0,zas){ int x; cin >>x; zaciatok[x] = 1; } FOR(i,0,zas){ int x; cin >>x; koniec[x] = 1; } queue q; FOR(i,0,n){ if(mp[i].size() == 1) q.push(i); } vi stav(n, 0); vi vis(n,0); vi nesprac_deti(n);FOR(i,0,n){ nesprac_deti[i] = mp[i].size(); } while(!q.empty()){ int cur = q.front(); q.pop(); if(vis[cur] == 1) continue; vis[cur] = 1; if(zaciatok[cur] == 1 and koniec[cur] == 0) stav[cur]++; if(zaciatok[cur] == 0 and koniec[cur] == 1) stav[cur]--; for(auto to : mp[cur]){ if(vis[to] == 0){ if (stav[cur] > 0) precom[cur][to] = stav[cur]; else precom[to][cur] = -stav[cur]; stav[to] += stav[cur]; } nesprac_deti[to] --; if(nesprac_deti[to] <= 1) q.push(to); } } vi dodavky(n); FOR(i,0,n){ for(auto j :precom[i]) dodavky[j.first] ++; } FOR(i,0,n) if(dodavky[i] == 0) q.push(i); vvi answer; FOR(i,0,n) vis[i] = 0; while(!q.empty()){ int cur = q.front(); q.pop(); if(vis[cur]) continue; vis[cur] = 1; for(auto j : precom[cur]){ answer.PB({cur, j.first,j.second}); dodavky[j.first]--; if(dodavky[j.first] == 0) q.push(j.first); } } cout <