#268. 「NOIP2008」双栈排序

「NOIP2008」双栈排序

题目描述

Tom最近在研究一个有趣的排序问题。如图所示,通过 22 个栈 S1S1S2S2 , Tom希望借助以下 44 种操作实现将输入序列升序排序。
操作 aa:如果输入序列不为空,将第一个元素压入栈 S1S1
操作 bb:如果栈 S1S1 不为空,将 S1S1 栈顶元素弹出至输出序列
操作 cc:如果输入序列不为空,将第一个元素压入栈 S2S2
操作 dd:如果栈 S2S2 不为空,将 S2S2 栈顶元素弹出至输出序列
pic1
当然,这样的操作序列有可能有几个,对于上例 (1,3,2,4)(1,3,2,4)<a,c,c,b,a,d,d,b><a,c,c,b,a,d,d,b>是另外一个可行的操作序列。Tom希望知道其中字典序最小的操作序列是什么.
pic2

输入格式

输入的第一行是一个整数 nn。 第二行有 nn 个用空格隔开的正整数,构成一个 1 n1~n 的排列。

输出格式

输出共一行,如果输入的排列不是“可双栈排序排列”,输出数字 00 ;否则输出字典序最小的操作序列,每两个操作之间用空格隔开,行尾没有空格。

样例

4
1 3 2 4
4
2 3 4 1
3
2 3 1
a b a a b b a b
0
a c a b b d

数据范围与提示

30%的数据满足: n<=10n<=10
50%的数据满足: n<=50n<=50
100%的数据满足: n<=1000n<=1000