← Home
package main

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

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

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

	var m int
	fmt.Fscan(in, &m)
	b := make([]int, m)
	for i := 0; i < m; i++ {
		fmt.Fscan(in, &b[i])
	}

	dp := make([]int, m)
	prev := make([]int, m)
	for i := 0; i < m; i++ {
		prev[i] = -1
	}

	for i := 0; i < n; i++ {
		current, last := 0, -1
		for j := 0; j < m; j++ {
			if a[i] == b[j] {
				if current+1 > dp[j] {
					dp[j] = current + 1
					prev[j] = last
				}
			} else if a[i] > b[j] {
				if dp[j] > current {
					current = dp[j]
					last = j
				}
			}
		}
	}

	bestLen, end := 0, -1
	for j := 0; j < m; j++ {
		if dp[j] > bestLen {
			bestLen = dp[j]
			end = j
		}
	}

	res := make([]int, bestLen)
	for i := bestLen - 1; i >= 0; i-- {
		res[i] = b[end]
		end = prev[end]
	}

	fmt.Fprintln(out, bestLen)
	for i, v := range res {
		if i > 0 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprint(out, v)
	}
	fmt.Fprintln(out)
}