#include <stdio.h>
#define N 1024
FILE *in, *out;
int a[N+1], b[N+1], l_max[N+1][N+1], m, n;
int max(int x, int y) {
return (x > y ? x : y);
}
void refac_subsirul(int l, int c) {
if (l_max[l][c] == 0) {
return;
}
if (a[l] == b[c]) {
refac_subsirul(l - 1, c - 1);
fprintf(out, "%d ", a[l]);
} else {
if (l_max[l-1][c] > l_max[l][c-1]) {
refac_subsirul(l - 1, c);
} else {
refac_subsirul(l, c - 1);
}
}
}
int main(void) {
in = fopen("cmlsc.in", "r");
fscanf(in, "%d%d", &m, &n);
for (int i = 1; i <= m; i++) {
fscanf(in, "%d", &a[i]);
}
for (int j = 1; j <= n; j++) {
fscanf(in, "%d", &b[j]);
}
fclose(in);
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (a[i] == b[j]) {
l_max[i][j] = 1 + l_max[i - 1][j - 1];
} else {
l_max[i][j] = max(l_max[i - 1][j], l_max[i][j - 1]);
}
}
}
out = fopen("cmlsc.out", "w");
fprintf(out, "%d\n", l_max[m][n]);
refac_subsirul(m, n);
fclose(out);
return 0;
}