#P0907. 栈排序

栈排序

题目描述

假设你有一个数列 aa,一个栈 ss(初始为空),和一个数列 bb(同样初始为空)。

你可以执行以下操作,直到 aass 都为空为止:

  • 取出数列 aa 的首元素,将其推入 ss 并从 aa 中移除(如果 aa 不为空);
  • ss 中取出栈顶元素,将其添加到数列 bb 的末尾,并从 ss 中弹出该元素(如果ss不为空)。

你可以以任意顺序执行这些操作。

如果存在一种方法可以使数列 bb 最终按非递减顺序排序,则称数列 aa可栈排序 的。

例如,数列 3,1,23, 1, 2 是可栈排序的,因为如果我们执行以下操作,bb 将会被排序:

  1. aa 中移除 33 并将其推入 ss
  2. aa 中移除 11 并将其推入 ss
  3. ss 中移除 11 并将其添加到 bb 的末尾;
  4. aa 中移除 22 并将其推入 ss
  5. ss 中移除 22 并将其添加到 bb 的末尾;
  6. ss 中移除 33 并将其添加到 bb 的末尾。

经过所有这些操作后,bb =  1,2,31, 2, 3 ,所以 3,1,23, 1, 2 是可栈排序的。 2,3,12, 3, 1 不是可栈排序。

现在你个一个大小为 nn 的排列 pp 的前 kk 个元素(回想一下,大小为 nn 的排列是一个大小为 nn 的数列,其中从 11nn 的每个整数恰好出现一次)。你必须恢复剩余的 nkn - k 个元素,使其成为可栈排序的数列。如果有多个答案,选择使 pp 字典序最大的答案(一个数列 qq 字典序大于数列 pp 当且仅当存在某个整数 kk,对于每个i<ki \lt kqi=piq_i = p_i,和 qk>pkq_k \gt p_k 都成立)。你不能交换或更改排列的前 kk 个元素。

输出你可以获得的字典序最大的排列 pp

如果不存在答案,则输出 1-1

输入格式

第一行包含两个整数 nnkk2n2×1051k<n2 \le n \le 2 \times 10^5,1 \le k \lt n),分别表示排列的大小和给定元素的数量。

第二行包含 kk 个整数p1p2pkp_1,p_2,\ldots,p_k1pin1 \le p_i \le n),表示排列 pp 的前 kk 个元素。这些整数互不相同。

输出格式

如果可能恢复大小为 nn 的可栈排序排列pp,使得 pp 的前 kk 个元素等于输入中给定的元素,则输出字典序最大的这样的排列。

否则输出 1-1

样例

5 3
3 2 1
3 2 1 5 4
5 3
2 3 1
-1
5 1
3
3 2 1 5 4
5 2
3 4
-1