#P15109. Adverse Present

Adverse Present

题目描述

给你一个长度为 nn 的排列,和一个整数 tp{0,1}tp\in\{0,1\}

定义一次操作如下:

选择一个子序列从原序列删除,并按原来顺序添加到排列最后。

请输出将这个排列从小到大排序所需要的最小操作次数 kk 并构造,特别地,如果 kn3×106k\cdot n\geq 3\times 10^6 或者 tp=0tp=0,你不需要构造(请参考输入输出格式)。

排列的定义:一个长度为 nn 的排列是一个由 1n1\sim n 的正整数组成的序列,满足其中每个数都出现了恰好一次。

子序列的定义:我们称序列 bb 是序列 aa 的子序列,当且仅当可以通过删除 aa 中的若干个元素得到 bb

输入格式

第一行两个整数 n,tpn,tp,代表排列长度,以及你是否需要构造方案。

第二行 nn 个数,第 ii 个数为排列中第 ii 个元素 aia_i,保证这些数互不相同。

输出格式

第一行一个数 kk,代表所需最小次数。

kn3×106k\cdot n\geq 3\times 10^6 或者 tp=0tp=0,在第二行输出 -1 并退出。

否则接下来 kk 行,每行第一个数 cc 代表此次操作所选择的子序列长度。然后输出 cc 个互不相同的数,代表此次操作选择的子序列由当前序列哪些下标的元素组成,这些数顺序随意。

4 1
4 3 2 1
2
2 1 3
2 1 3
5 1
5 2 3 4 1
2
3 2 3 4
1 1
5 0
5 2 3 4 1
2
-1
8 0
1 8 5 4 3 2 6 7
3
-1
8 0
1 3 5 7 2 4 6 8
2
-1

提示

本题采用捆绑测试。

Subtask 1(1pts):\texttt{Subtask 1(1pts)}: ai=ia_i=i

Subtask 2(19pts):\texttt{Subtask 2(19pts):} ai=ni+1a_i=n-i+1

Subtask 3(15pts):\texttt{Subtask 3(15pts):} n5n\le 5

Subtask 4(20pts):\texttt{Subtask 4(20pts):} n2×103n\le 2\times 10^3

Subtask 5(15pts):\texttt{Subtask 5(15pts):} tp=0tp=0

Subtask 6(30pts):\texttt{Subtask 6(30pts):} 无特殊限制。

对于所有数据,1n1051\leq n \leq 10^5,保证 aa 是一个排列。