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)
}