#include using namespace std; using ll = long long; using vi = vector; vector adj; vi need; vi black, white; vector> res; void needdfs(int a, int p) { need[a] = white[a] - black[a]; for (auto &&b : adj[a]) if(b != p) { needdfs(b, a); need[a] += need[b]; } } void resdfs(int a, int p, bool up) { if(need[a] < 0 && !up) { res.push_back({p, a, -need[a]}); } for (auto &&b : adj[a]) if(b != p) { resdfs(b, a, up); } if(need[a] > 0 && up) { res.push_back({a, p, need[a]}); } } int main() { cin.tie(0)->sync_with_stdio(0); ll n; cin >> n; adj.assign(n, {}); need = black = white = vi(n, 0); for (int i = 0; i < n-1; i++) { int a, b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } int k; cin >> k; for (int i = 0; i < k; i++) { int a; cin >> a; white[a] = 1; } for (int i = 0; i < k; i++) { int a; cin >> a; black[a] = 1; } needdfs(0, 0); resdfs(0, 0, true); resdfs(0, 0, false); cout << res.size() << "\n"; for (auto [a, b, n] : res) { cout << a << " " << b << " " << n << "\n"; } }