大家可能不太了解,Malnar 先生在空闲时间经常通过志愿服务来回馈社区。没错!他在信息学问题的志愿服务中心非常活跃。
最近,他接到了中心的电话,结果发现那里缺少递增序列。总是乐于助人的 Malnar 先生欣然答应了。具体来说,他为了这个目的保留了一个包含 $n$ 个整数的数组。从 $1$ 到 $n$ 的所有整数在他的数组中恰好出现一次。
Malnar 先生将从他的数组中选择一些递增子序列捐赠给中心,而他会将剩余的数字留作他用。必须注意,数组中的每个数字最多只能用于一个子序列,也就是说,所选的子序列必须具有不同的下标。
子序列定义为通过删除数组中的某些(可能为零)元素,同时保持剩余元素顺序而获得的任何序列。如果子序列中的每个数字(第一个除外)都大于前一个数字,则称该子序列是递增的。
由于 Malnar 先生非常慷慨,他希望他捐赠的所有序列都是最长递增子序列。换句话说,如果 $l$ 是原始数组的最长递增子序列的长度,Malnar 先生将选择若干个长度均为 $l$ 的不相交递增子序列。
Malnar 先生希望捐赠尽可能多的子序列。对于给定的 Malnar 先生的数组,请输出他所选出的子序列的最大数量,并提供此类选择的一个示例。
输入格式
第一行包含整数 $n$,即数组的大小。
第二行包含 $n$ 个数字 $p_i$ ($1 \le p_i \le n$),代表数组的元素。$1$ 到 $n$ 之间的每个正整数在数组中恰好出现一次。
输出格式
第一行输出 Malnar 先生选择的子序列的最大数量,以及最长递增子序列的长度。
在接下来的每一行中,输出此类选择中的一个子序列。子序列由位置列表(即数组的下标)定义,这些下标应按递增顺序排列。
输出的子序列应该是递增的、不相交的,并且具有相同的长度——即最长递增子序列的长度。
子序列的相对顺序无关紧要。此外,如果存在多个解,你可以输出其中任意一个。
数据范围
在每个子任务中,均满足 $1 \le n \le 1\,000\,000$。
| 子任务 | 分值 | 数据范围 |
|---|---|---|
| 1 | 10 | $1 \le n \le 15$ |
| 2 | 40 | $1 \le n \le 1000$ |
| 4 | 60 | $1 \le n \le 1\,000\,000$ |
样例
输入格式 1
3 1 2 3
输出格式 1
1 3 1 2 3
输入格式 2
4 4 3 2 1
输出格式 2
4 1 1 2 3 4
输入格式 3
7 2 1 6 5 7 3 4
输出格式 3
2 3 1 3 5 2 6 7
说明
第三个样例的说明: 最长递增子序列的长度为 $3$。由下标 $1, 3, 5$(即值 $2, 6, 7$)确定的子序列是递增的。由下标 $2, 6, 7$(即值 $1, 3, 4$)确定的子序列也是递增的。这两个子序列没有公共元素,且它们都具有最大长度,因此这是一个有效的选择。无法选择超过两个这样的子序列。