← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n int
	if _, err := fmt.Fscan(in, &n); err != nil {
		return
	}

	adj := make([][]int, n+1)
	for i := 0; i < n-1; i++ {
		var u, v int
		fmt.Fscan(in, &u, &v)
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	init := make([]int, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(in, &init[i])
	}

	goal := make([]int, n+1)
	for i := 1; i <= n; i++ {
		fmt.Fscan(in, &goal[i])
	}

	var ans []int
	var dfs func(u, p, oddFlips, evenFlips, depth int)
	dfs = func(u, p, oddFlips, evenFlips, depth int) {
		cur := init[u]
		if depth%2 == 1 {
			cur ^= oddFlips
		} else {
			cur ^= evenFlips
		}

		if cur != goal[u] {
			ans = append(ans, u)
			if depth%2 == 1 {
				oddFlips ^= 1
			} else {
				evenFlips ^= 1
			}
		}

		for _, v := range adj[u] {
			if v != p {
				dfs(v, u, oddFlips, evenFlips, depth+1)
			}
		}
	}

	dfs(1, 0, 0, 0, 0)

	fmt.Fprintln(out, len(ans))
	for _, v := range ans {
		fmt.Fprintln(out, v)
	}
}