Public Judge

pjudge

Time Limit: 2 s Memory Limit: 512 MB Total points: 100 Hackable ✓
[+15]
统计

题目描述

今天是 YQH 的生日,她得到了一个 1n 的排列作为礼物。

YQH 是一个有强迫症的女孩子,她希望把这个排列从小到大排序,具体的,她可以进行这样的操作:

  • [1,n] 分成若干个区间,假如是 m 段,依次为 [l1,r1],[l2,r2],,[lm,rm],其中 l1=1,rm=n,li+1=ri+1,liri
  • 假如原来的排列为 a1,,n,那么把排列变为 alm,alm+1,,arm,alm1,alm1+1,,arm1,,al1,al1+1,,ar1,即把每一段看作一个整体,然后把这个排列进行 reverse。

YQH 希望进行尽可能少的操作,把序列从小到大排序。但是她太笨了,所以她找到你帮忙。注意,你不需要得到最小操作数。

输入格式

第一行一个正整数 n,表示排列长度。

第二行 n 个整数 a1,a2,,an,表示 YQH 获得的排列,我们保证 a1,,n1n 的排列。

输出格式

第一行一个整数表示你进行的操作次数,假设为 p

接下来 p 行,每行第一个整数 m 表示你这次操作把排列分成 m 段,接下来 m 个整数 leni 分别表示第 i 段的长度,即 ril1+1leni,你需要保证 mi=1leni=n

样例

输入1

4
3 1 2 4

输出1

2
2 3 1 
3 1 1 2

第一次操作,把序列分为 [3,1,2],[4],操作完变为 [4,3,1,2]

第二次操作,把序列分为 [4],[3],[1,2],操作完变为 [1,2,3,4]

输入2

6
6 5 4 3 2 1

输出2

1
6 1 1 1 1 1 1

第一次操作,把序列分为 [6],[5],[4],[3],[2],[1],操作完变为 [1,2,3,4,5,6]

输入3

1
1

输出3

0

原序列已经有序,无需操作。

数据范围

本题采用评分参数进行评分,具体的,对于每个测试点,我们有评分参数 p0,p1,p2,p3,p4,保证 pipi+1。假如你的操作数为 p,你在该测试点的得分为

[pp0]+3i=0max

其中定义 0/0=1,-1/0=-\infty

对于每个子任务,假如该子任务分值为 w,则你的得分为该子任务所有测试点得分的最小值乘上 w

\text{subtask1 10pts},n\le8,p_0=p_1=p_2=p_3=p_4=10^6

\text{subtask2 20pts},n\le200,p_0=p_1=p_2=p_3=p_4=40000

\text{subtask3 70pts},n=20000,p_0=1000,p_1=500,p_2=240,p_3=140,p_4=90