#bzoj2214. Shift

Shift

题目翻译

Byteasar\text{Byteasar}给儿子Bytie\text{Bytie}买了一套从到编号的积木,并按照一定的顺序排列成一排。Bytie\text{Bytie}的目标是重新排列块,使其从最小数字到最大数字自然排序。但是,Bytie\text{Bytie}只允许进行以下操作:将最后一个块放在最开始的位置(移动aa),并将第三个块放置在最开始位置(移动bb)。帮助Bytie\text{Bytie}编写一个程序,告诉一个给定的块排列是否可以正确地重新排序,如果可以,告诉正确的移动顺序。

题目解释

有一个1n1\ldots n的排列,有两种操作:

  • (a) 将最后一个数移到最前面
  • (b) 把第三个数移到最前面

我们将连续进行kk次同一个操作称为“一块操作”,表示为kak_akbk_b。找到一个操作序列使得进行这些操作后,排列变为1,2,3,...,n1,2,3,...,n

输入格式

翻译

在标准输入的第一行中有一个整数NN。在第二行中,有从到的整数,用单个空格分隔。没有数字出现两次,因此它们代表了块的初始排列。

解释

第一行NN;

下面一行NN个数表示这个排列。

输出格式

原件:tmp.png

翻译

如果没有一系列的动作导致区块数量增加的安排,你的程序应该打印出NIE DA SIE(波兰语中没有wey),没有引号。否则,在第一行中应该有一个整数mm,表示操作次数,aa操作是aabb移动的kk次执行。如果m>0m>0,那么第二行应该有一个附加了aabb的整数序列。因此,kak_a(对于0<k<n0<k<n)表示移动aakk次执行,类似地,kbk_b(对于0n0\le n)表示操作bbkk次重复执行。此外,第二行中数字对应的字符必须交替。如果有多个解决方案,你的程序可以任意选择一个。

解释

如果不存在这样的操作序列,输出NIE DA SIE,否则第一行mm,表示操作的块数。

下面一行,表示这mm块操作。需要满足相邻两块操作的种类不同,每块操作中进行的次数大于00小于nn

样例

4 
1 3 2 4
4 
3a 2b 2a 2b
7 
1 3 2 4 5 6 7
NIE DA SIE
3 
1 2 3
0

数据范围与约定

对于100%100\%的数据:1N2000,mN21\le N\le 2000,m\le N^2.

鸣谢

鸣谢NOIGOLD vfleaking\text{NOIGOLD vfleaking}