#CF1077D. 切割数组

切割数组

D. 切割数组

每个测试的时间限制:3 秒
内存限制:256 兆字节

你有一个由 nn 个整数组成的数组 ss
你需要找到一个长度为 kk 的数组 tt,使得从 ss 中能够切割出数组 tt副本数量最大

切割出 tt 的一个副本的含义是:对于数组 tt 中的每个元素 tit_i,你需要在 ss 中找到该元素并把它从 ss 中移除。如果对于某个 tit_i 你无法在 ss 中找到该元素,那么你就无法再切割出下一个 tt 的副本。
两个数组都可以包含重复元素。

例如,如果 s=[1,2,3,2,4,3,1]s = [1, 2, 3, 2, 4, 3, 1]k=3k = 3,那么一个可能的答案是 t=[1,2,3]t = [1, 2, 3]
这个数组 tt 可以切割出 22 次。

  • 为了切割出第一个 tt 副本,你可以使用元素 $[1, \underline{2}, 3, 2, 4, \underline{3}, \underline{1}]$(使用高亮元素)。
    切割出第一个 tt 副本后,ss 可能变成 [1,3,2,4][1, 3, 2, 4]
  • 为了切割出第二个 tt 副本,你可以使用元素 [1,3,2,4][\underline{1}, \underline{3}, \underline{2}, 4]
    切割出第二个 tt 副本后,ss 将变成 [4][4]

你的任务是:找到一个数组 tt,使得你从 ss 中切割出 tt 的副本的次数最多。
如果有多个答案,你可以输出其中任意一个。

输入
第一行包含两个整数 nnkk1kn21051 \le k \le n \le 2 \cdot 10^5)—— 数组 ss 的元素个数,以及数组 tt 需要的元素个数。
第二行包含恰好 nn 个整数 s1,s2,,sns_1, s_2, \dots, s_n1si21051 \le s_i \le 2 \cdot 10^5)。

输出
输出 kk 个整数 —— 数组 tt 的元素,使得从 ss 中切割出 tt 的副本数量最大。
如果有多个答案,输出任意一个。
数组 tt 可以包含重复元素。tt 的所有元素 tit_i 应满足 1ti21051 \le t_i \le 2 \cdot 10^5

示例

输入

7 3
1 2 3 2 4 3 1

输出

1 2 3

输入

10 4
1 3 1 3 10 3 7 7 12 3

输出

7 3 1 3

输入

15 2
1 2 1 1 1 2 1 1 2 1 2 1 1 1 1

输出

1 1

提示
第一个示例已在题目描述中解释。
在第二个示例中,唯一的答案是 [7,3,1,3][7, 3, 1, 3] 及其任意排列。可以证明,你无法选择任何其他数组使得最大切割次数等于 22
在第三个示例中,数组 tt 可以被切割出 55 次。