n, m = map(int, input().split()); assert 1 <= m <= n <= 1000 S = list(map(int, input().split())); assert 1 <= min(S) and max(S) < 1000 T = list(map(int, input().split())); assert 1 <= min(T) and max(T) < 1000 dp = [[0 for _ in range(m+1)] for _ in range(n+1)] for i in range(n-1, -1, -1): for j in range(m-1, -1, -1): if S[i] == T[j]: dp[i][j] = dp[i+1][j+1]+1 else: dp[i][j] = max(dp[i+1][j], dp[i][j+1]) inf = 1 << 30 Ans = [inf] * (n-m+1) from heapq import * hq = [] heappush(hq, (-1, inf, 0, 0)) while hq: k, nxt, i, j = heappop(hq) if Ans[k] < nxt: continue if i < n and j < m and S[i] == T[j]: heappush(hq, (k, nxt, i+1, j+1)) if i < n and dp[i][j] == dp[i+1][j] and S[i] <= Ans[k+1]: Ans[k+1] = S[i] heappush(hq, (k+1, S[i], i+1, j)) print(*Ans[:-1])