#include using namespace std; #define rep(i, a, b) for (int i = (a); i < (b); i++) #define fo(i, n) rep(i, 0, n) #define all(x) std::begin(x), std::end(x) #define sz(x) int((x).size()) #define F first #define S second #define MP make_pair #define PB push_back typedef long long ll; typedef vector vi; typedef pair pii; typedef vector vvi; typedef vector vpii; typedef vector vll; typedef pair pll; typedef vector vvll; typedef vector vpll; typedef vector vd; typedef pair pdd; typedef vector vvd; typedef vector vpdd; int n, k; vi diffs; vvi g; vector> t1, t2; int dfs(int u, int p) { int o = diffs[u]; for (int v: g[u]) { if (v == p) continue; o += dfs(v, u); } if (o > 0) { t1.PB({{u, p}, o}); } else if (o < 0) { t2.PB({{p, u}, -o}); } return o; } signed main() { cin.tie(0)->sync_with_stdio(0); cin.exceptions(cin.badbit | cin.failbit); cin >> n; g = vvi(n); diffs = vi(n, 0); fo(_,n-1) { int a, b; cin >> a >> b; g[a].PB(b); g[b].PB(a); } cin >> k; fo(i, k) { int a; cin >> a; diffs[a]++; } fo(i, k) { int a; cin >> a; diffs[a]--; } assert(dfs(0, -1) == 0); reverse(all(t2)); cout << t1.size() + t2.size() << "\n"; for (auto x: t1) { cout << x.F.F << " " << x.F.S << " " << x.S << "\n"; } for (auto x: t2) { cout << x.F.F << " " << x.F.S << " " << x.S << "\n"; } }