#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_multiset tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>
#define pb push_back
#define ff first
#define ss second
const int N = 3e5 + 5;
vi graf[N], sciezka, trasa;
vll ile;
ll A[N], B[N];
int c[N], oryg[N], czy[N], dp1[N], dp2[N];
int best, start;
bool cmp(int a, int b){
return c[a] > c[b];
}
void dfs(int v, int ojc){
c[v] = oryg[v];
czy[v] = (c[v] == 0);
dp1[v] = 0;
dp2[v] = -1;
for(int u : graf[v]){
if(u == ojc) continue;
dfs(u, v);
c[v] += c[u];
czy[v] &= czy[u];
int kand = dp1[u] + 1 - 2 * (c[u] > 0);
if(!czy[u] && kand >= dp1[v]){
dp1[v] = kand;
dp2[v] = u;
}
}
for(int i = 0; i < (int)graf[v].size(); i++){
int u = graf[v][i];
if(u == ojc) continue;
if(czy[u]){
swap(graf[v][i], graf[v].back());
graf[v].pop_back();
i--;
}
}
}
void dfs2(int v, int ojc, int up){
if(c[v] < 0) up -= 2;
int kand = max(dp1[v], up);
if(kand > best){
best = kand;
start = v;
}
int m = graf[v].size();
vi pref(m + 1, 0), suf(m + 1, 0);
for(int i = 0; i < m; i++){
pref[i + 1] = pref[i];
int u = graf[v][i];
if(u == ojc) continue;
int kand2 = dp1[u] + 1 - 2 * (c[u] > 0);
pref[i + 1] = max(pref[i + 1], kand2);
}
for(int i = m - 1; i >= 0; i--){
suf[i] = suf[i + 1];
int u = graf[v][i];
if(u == ojc) continue;
int kand2 = dp1[u] + 1 - 2 * (c[u] > 0);
suf[i] = max(suf[i], kand2);
}
for(int i = 0; i < m; i++){
int u = graf[v][i];
if(u == ojc) continue;
int nast = max({pref[i], suf[i + 1], up}) + 1;
dfs2(u, v, nast);
}
}
void odz(int v){
sciezka.pb(v);
if(dp2[v] == -1) return;
odz(dp2[v]);
}
void dfs3(int v, int ojc){
sort(graf[v].begin(), graf[v].end(), cmp);
trasa.pb(v);
ile.pb(-A[v]);
for(int u : graf[v]){
if(u == ojc) continue;
dfs3(u, v);
trasa.pb(v);
ile.pb(0);
}
ile.back() += B[v];
}
void solve(){
int n;
cin >> n;
best = -1;
start = -1;
sciezka.clear();
trasa.clear();
ile.clear();
for(int i = 1; i <= n; i++){
graf[i].clear();
czy[i] = 0;
c[i] = 0;
oryg[i] = 0;
dp1[i] = 0;
dp2[i] = -1;
}
for(int i = 1; i <= n; i++)
cin >> A[i];
for(int i = 1; i <= n; i++)
cin >> B[i];
for(int i = 1; i <= n; i++){
// Trzymamy dokładnie tę samą konwencję co bike.h:
// d = A - B
oryg[i] = A[i] - B[i];
c[i] = oryg[i];
}
for(int i = 1; i < n; i++){
int a, b;
cin >> a >> b;
// input ma numery 0..n-1
++a;
++b;
graf[a].pb(b);
graf[b].pb(a);
}
int root = -1;
for(int i = 1; i <= n; i++){
if(A[i] != B[i]){
root = i;
break;
}
}
// Wszystko już jest poprawne.
if(root == -1){
cout << "0\n";
cout << "0\n";
cout << "0\n";
return;
}
// Pierwszy DP
dfs(root, 0);
// Szukamy najlepszego początku głównej ścieżki
dfs2(root, 0, 0);
// Drugi DFS od znalezionego początku
// i odbudowanie c jako bilansów poddrzew
for(int i = 1; i <= n; i++){
c[i] = oryg[i];
czy[i] = 0;
dp1[i] = 0;
dp2[i] = -1;
}
dfs(start, 0);
// Odtwarzamy główną ścieżkę
sciezka.clear();
for(int v = start; v != -1; v = dp2[v])
sciezka.pb(v);
/*
Usuwamy krawędzie głównej ścieżki.
To jest dokładnie to, co robi oryginalny kod bike.h.
*/
for(int i = 1; i < (int)sciezka.size(); i++){
int x = sciezka[i - 1];
int y = sciezka[i];
auto it1 = find(graf[x].begin(), graf[x].end(), y);
graf[x].erase(it1);
auto it2 = find(graf[y].begin(), graf[y].end(), x);
graf[y].erase(it2);
}
/*
Budowanie konkretnej trasy.
*/
int m = sciezka.size();
for(int i = 0; i < m; i++){
if(i + 1 == m || c[sciezka[i + 1]] <= 0){
int j = i - 1;
while(j >= 0 && c[sciezka[j + 1]] > 0)
j--;
for(int k = i; k > j; k--)
dfs3(sciezka[k], -1);
for(int k = j + 2; k <= i; k++){
trasa.pb(sciezka[k]);
ile.pb(0);
}
}
else{
trasa.pb(sciezka[i]);
ile.pb(0);
}
}
int koszt = (int)trasa.size() - 1;
cout << koszt << '\n';
// z powrotem na numerację 0..n-1
for(int i = 0; i < (int)trasa.size(); i++){
if(i) cout << ' ';
cout << trasa[i] - 1;
}
cout << '\n';
for(int i = 0; i < (int)ile.size(); i++){
if(i) cout << ' ';
cout << ile[i];
}
cout << '\n';
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while(t--)
solve();
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL3RyZWVfcG9saWN5LmhwcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIF9fZ251X3BiZHM7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CnR5cGVkZWYgcGFpcjxsbCwgbGw+IHBsbDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiB2ZWN0b3I8bGw+IHZsbDsKCiNkZWZpbmUgb3JkZXJlZF9zZXQgdHJlZTxpbnQsIG51bGxfdHlwZSwgbGVzczxpbnQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPgojZGVmaW5lIG9yZGVyZWRfbXVsdGlzZXQgdHJlZTxpbnQsIG51bGxfdHlwZSwgbGVzc19lcXVhbDxpbnQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgc3Mgc2Vjb25kCgpjb25zdCBpbnQgTiA9IDNlNSArIDU7Cgp2aSBncmFmW05dLCBzY2llemthLCB0cmFzYTsKdmxsIGlsZTsKCmxsIEFbTl0sIEJbTl07CmludCBjW05dLCBvcnlnW05dLCBjenlbTl0sIGRwMVtOXSwgZHAyW05dOwoKaW50IGJlc3QsIHN0YXJ0OwoKYm9vbCBjbXAoaW50IGEsIGludCBiKXsKICAgIHJldHVybiBjW2FdID4gY1tiXTsKfQoKdm9pZCBkZnMoaW50IHYsIGludCBvamMpewogICAgY1t2XSA9IG9yeWdbdl07CiAgICBjenlbdl0gPSAoY1t2XSA9PSAwKTsKICAgIGRwMVt2XSA9IDA7CiAgICBkcDJbdl0gPSAtMTsKCiAgICBmb3IoaW50IHUgOiBncmFmW3ZdKXsKICAgICAgICBpZih1ID09IG9qYykgY29udGludWU7CgogICAgICAgIGRmcyh1LCB2KTsKCiAgICAgICAgY1t2XSArPSBjW3VdOwogICAgICAgIGN6eVt2XSAmPSBjenlbdV07CgogICAgICAgIGludCBrYW5kID0gZHAxW3VdICsgMSAtIDIgKiAoY1t1XSA+IDApOwoKICAgICAgICBpZighY3p5W3VdICYmIGthbmQgPj0gZHAxW3ZdKXsKICAgICAgICAgICAgZHAxW3ZdID0ga2FuZDsKICAgICAgICAgICAgZHAyW3ZdID0gdTsKICAgICAgICB9CiAgICB9CgogICAgZm9yKGludCBpID0gMDsgaSA8IChpbnQpZ3JhZlt2XS5zaXplKCk7IGkrKyl7CiAgICAgICAgaW50IHUgPSBncmFmW3ZdW2ldOwoKICAgICAgICBpZih1ID09IG9qYykgY29udGludWU7CgogICAgICAgIGlmKGN6eVt1XSl7CiAgICAgICAgICAgIHN3YXAoZ3JhZlt2XVtpXSwgZ3JhZlt2XS5iYWNrKCkpOwogICAgICAgICAgICBncmFmW3ZdLnBvcF9iYWNrKCk7CiAgICAgICAgICAgIGktLTsKICAgICAgICB9CiAgICB9Cn0KCnZvaWQgZGZzMihpbnQgdiwgaW50IG9qYywgaW50IHVwKXsKICAgIGlmKGNbdl0gPCAwKSB1cCAtPSAyOwoKICAgIGludCBrYW5kID0gbWF4KGRwMVt2XSwgdXApOwoKICAgIGlmKGthbmQgPiBiZXN0KXsKICAgICAgICBiZXN0ID0ga2FuZDsKICAgICAgICBzdGFydCA9IHY7CiAgICB9CgogICAgaW50IG0gPSBncmFmW3ZdLnNpemUoKTsKCiAgICB2aSBwcmVmKG0gKyAxLCAwKSwgc3VmKG0gKyAxLCAwKTsKCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgbTsgaSsrKXsKICAgICAgICBwcmVmW2kgKyAxXSA9IHByZWZbaV07CgogICAgICAgIGludCB1ID0gZ3JhZlt2XVtpXTsKCiAgICAgICAgaWYodSA9PSBvamMpIGNvbnRpbnVlOwoKICAgICAgICBpbnQga2FuZDIgPSBkcDFbdV0gKyAxIC0gMiAqIChjW3VdID4gMCk7CgogICAgICAgIHByZWZbaSArIDFdID0gbWF4KHByZWZbaSArIDFdLCBrYW5kMik7CiAgICB9CgogICAgZm9yKGludCBpID0gbSAtIDE7IGkgPj0gMDsgaS0tKXsKICAgICAgICBzdWZbaV0gPSBzdWZbaSArIDFdOwoKICAgICAgICBpbnQgdSA9IGdyYWZbdl1baV07CgogICAgICAgIGlmKHUgPT0gb2pjKSBjb250aW51ZTsKCiAgICAgICAgaW50IGthbmQyID0gZHAxW3VdICsgMSAtIDIgKiAoY1t1XSA+IDApOwoKICAgICAgICBzdWZbaV0gPSBtYXgoc3VmW2ldLCBrYW5kMik7CiAgICB9CgogICAgZm9yKGludCBpID0gMDsgaSA8IG07IGkrKyl7CiAgICAgICAgaW50IHUgPSBncmFmW3ZdW2ldOwoKICAgICAgICBpZih1ID09IG9qYykgY29udGludWU7CgogICAgICAgIGludCBuYXN0ID0gbWF4KHtwcmVmW2ldLCBzdWZbaSArIDFdLCB1cH0pICsgMTsKCiAgICAgICAgZGZzMih1LCB2LCBuYXN0KTsKICAgIH0KfQoKdm9pZCBvZHooaW50IHYpewogICAgc2NpZXprYS5wYih2KTsKCiAgICBpZihkcDJbdl0gPT0gLTEpIHJldHVybjsKCiAgICBvZHooZHAyW3ZdKTsKfQoKdm9pZCBkZnMzKGludCB2LCBpbnQgb2pjKXsKICAgIHNvcnQoZ3JhZlt2XS5iZWdpbigpLCBncmFmW3ZdLmVuZCgpLCBjbXApOwoKICAgIHRyYXNhLnBiKHYpOwogICAgaWxlLnBiKC1BW3ZdKTsKCiAgICBmb3IoaW50IHUgOiBncmFmW3ZdKXsKICAgICAgICBpZih1ID09IG9qYykgY29udGludWU7CgogICAgICAgIGRmczModSwgdik7CgogICAgICAgIHRyYXNhLnBiKHYpOwogICAgICAgIGlsZS5wYigwKTsKICAgIH0KCiAgICBpbGUuYmFjaygpICs9IEJbdl07Cn0KCnZvaWQgc29sdmUoKXsKICAgIGludCBuOwogICAgY2luID4+IG47CgogICAgYmVzdCA9IC0xOwogICAgc3RhcnQgPSAtMTsKCiAgICBzY2llemthLmNsZWFyKCk7CiAgICB0cmFzYS5jbGVhcigpOwogICAgaWxlLmNsZWFyKCk7CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIGdyYWZbaV0uY2xlYXIoKTsKICAgICAgICBjenlbaV0gPSAwOwogICAgICAgIGNbaV0gPSAwOwogICAgICAgIG9yeWdbaV0gPSAwOwogICAgICAgIGRwMVtpXSA9IDA7CiAgICAgICAgZHAyW2ldID0gLTE7CiAgICB9CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgY2luID4+IEFbaV07CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgY2luID4+IEJbaV07CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIC8vIFRyenltYW15IGRva8WCYWRuaWUgdMSZIHNhbcSFIGtvbndlbmNqxJkgY28gYmlrZS5oOgogICAgICAgIC8vIGQgPSBBIC0gQgogICAgICAgIG9yeWdbaV0gPSBBW2ldIC0gQltpXTsKICAgICAgICBjW2ldID0gb3J5Z1tpXTsKICAgIH0KCiAgICBmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKXsKICAgICAgICBpbnQgYSwgYjsKICAgICAgICBjaW4gPj4gYSA+PiBiOwoKICAgICAgICAvLyBpbnB1dCBtYSBudW1lcnkgMC4ubi0xCiAgICAgICAgKythOwogICAgICAgICsrYjsKCiAgICAgICAgZ3JhZlthXS5wYihiKTsKICAgICAgICBncmFmW2JdLnBiKGEpOwogICAgfQoKICAgIGludCByb290ID0gLTE7CgogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIGlmKEFbaV0gIT0gQltpXSl7CiAgICAgICAgICAgIHJvb3QgPSBpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgLy8gV3N6eXN0a28ganXFvCBqZXN0IHBvcHJhd25lLgogICAgaWYocm9vdCA9PSAtMSl7CiAgICAgICAgY291dCA8PCAiMFxuIjsKICAgICAgICBjb3V0IDw8ICIwXG4iOwogICAgICAgIGNvdXQgPDwgIjBcbiI7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFBpZXJ3c3p5IERQCiAgICBkZnMocm9vdCwgMCk7CgogICAgLy8gU3p1a2FteSBuYWpsZXBzemVnbyBwb2N6xIV0a3UgZ8WCw7N3bmVqIMWbY2llxbxraQogICAgZGZzMihyb290LCAwLCAwKTsKCiAgICAvLyBEcnVnaSBERlMgb2Qgem5hbGV6aW9uZWdvIHBvY3rEhXRrdQogICAgLy8gaSBvZGJ1ZG93YW5pZSBjIGpha28gYmlsYW5zw7N3IHBvZGRyemV3CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgY1tpXSA9IG9yeWdbaV07CiAgICAgICAgY3p5W2ldID0gMDsKICAgICAgICBkcDFbaV0gPSAwOwogICAgICAgIGRwMltpXSA9IC0xOwogICAgfQoKICAgIGRmcyhzdGFydCwgMCk7CgogICAgLy8gT2R0d2FyemFteSBnxYLDs3duxIUgxZtjaWXFvGvEmQogICAgc2NpZXprYS5jbGVhcigpOwoKICAgIGZvcihpbnQgdiA9IHN0YXJ0OyB2ICE9IC0xOyB2ID0gZHAyW3ZdKQogICAgICAgIHNjaWV6a2EucGIodik7CgogICAgLyoKICAgICAgICBVc3V3YW15IGtyYXfEmWR6aWUgZ8WCw7N3bmVqIMWbY2llxbxraS4KICAgICAgICBUbyBqZXN0IGRva8WCYWRuaWUgdG8sIGNvIHJvYmkgb3J5Z2luYWxueSBrb2QgYmlrZS5oLgogICAgKi8KICAgIGZvcihpbnQgaSA9IDE7IGkgPCAoaW50KXNjaWV6a2Euc2l6ZSgpOyBpKyspewogICAgICAgIGludCB4ID0gc2NpZXprYVtpIC0gMV07CiAgICAgICAgaW50IHkgPSBzY2llemthW2ldOwoKICAgICAgICBhdXRvIGl0MSA9IGZpbmQoZ3JhZlt4XS5iZWdpbigpLCBncmFmW3hdLmVuZCgpLCB5KTsKICAgICAgICBncmFmW3hdLmVyYXNlKGl0MSk7CgogICAgICAgIGF1dG8gaXQyID0gZmluZChncmFmW3ldLmJlZ2luKCksIGdyYWZbeV0uZW5kKCksIHgpOwogICAgICAgIGdyYWZbeV0uZXJhc2UoaXQyKTsKICAgIH0KCiAgICAvKgogICAgICAgIEJ1ZG93YW5pZSBrb25rcmV0bmVqIHRyYXN5LgogICAgKi8KICAgIGludCBtID0gc2NpZXprYS5zaXplKCk7CgogICAgZm9yKGludCBpID0gMDsgaSA8IG07IGkrKyl7CiAgICAgICAgaWYoaSArIDEgPT0gbSB8fCBjW3NjaWV6a2FbaSArIDFdXSA8PSAwKXsKCiAgICAgICAgICAgIGludCBqID0gaSAtIDE7CgogICAgICAgICAgICB3aGlsZShqID49IDAgJiYgY1tzY2llemthW2ogKyAxXV0gPiAwKQogICAgICAgICAgICAgICAgai0tOwoKICAgICAgICAgICAgZm9yKGludCBrID0gaTsgayA+IGo7IGstLSkKICAgICAgICAgICAgICAgIGRmczMoc2NpZXprYVtrXSwgLTEpOwoKICAgICAgICAgICAgZm9yKGludCBrID0gaiArIDI7IGsgPD0gaTsgaysrKXsKICAgICAgICAgICAgICAgIHRyYXNhLnBiKHNjaWV6a2Fba10pOwogICAgICAgICAgICAgICAgaWxlLnBiKDApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIHRyYXNhLnBiKHNjaWV6a2FbaV0pOwogICAgICAgICAgICBpbGUucGIoMCk7CiAgICAgICAgfQogICAgfQoKICAgIGludCBrb3N6dCA9IChpbnQpdHJhc2Euc2l6ZSgpIC0gMTsKCiAgICBjb3V0IDw8IGtvc3p0IDw8ICdcbic7CgogICAgLy8geiBwb3dyb3RlbSBuYSBudW1lcmFjasSZIDAuLm4tMQogICAgZm9yKGludCBpID0gMDsgaSA8IChpbnQpdHJhc2Euc2l6ZSgpOyBpKyspewogICAgICAgIGlmKGkpIGNvdXQgPDwgJyAnOwogICAgICAgIGNvdXQgPDwgdHJhc2FbaV0gLSAxOwogICAgfQogICAgY291dCA8PCAnXG4nOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCAoaW50KWlsZS5zaXplKCk7IGkrKyl7CiAgICAgICAgaWYoaSkgY291dCA8PCAnICc7CiAgICAgICAgY291dCA8PCBpbGVbaV07CiAgICB9CiAgICBjb3V0IDw8ICdcbic7Cn0KCmludCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBpbnQgdDsKICAgIGNpbiA+PiB0OwoKICAgIHdoaWxlKHQtLSkKICAgICAgICBzb2x2ZSgpOwoKICAgIHJldHVybiAwOwp9