#SDNU1195. 双栈排序

双栈排序

Description

TomTom最近在研究一个有趣的排序问题。如图所示,通过22个栈S1S1S2TomS2,Tom希望借助以下44种操作实现将输入序列升序排序。 操作aa 如果输入序列不为空,将第一个元素压入栈S1S1 操作bb 如果栈S1S1不为空,将S1S1栈顶元素弹出至输出序列 操作cc 如果输入序列不为空,将第一个元素压入栈S2S2 操作dd 如果栈S2S2不为空,将S2S2栈顶元素弹出至输出序列 如果一个1n1\sim n的排列PP可以通过一系列操作使得输出序列为12(n1)nTom1,2,…,(n-1),n,Tom就称PP是一个“可双栈排序排列”。例如(1,3,2,4)(1,3,2,4)就是一个“可双栈排序序列”,而(2,3,4,1)(2,3,4,1)不是。下图描述了一个将(1,3,2,4)(1,3,2,4)排序的操作序列: 当然,这样的操作序列有可能有几个,对于上例(1,3,2,4)(1,3,2,4),是另外一个可行的操作序列。TomTom希望知道其中字典序最小的操作序列是什么。

Format

Input

输入的第一行是一个整数nn1000n(n\le 1000)。 第二行有nn个用空格隔开的正整数,构成一个1n1\sim n的排列。

Output

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

Samples

4
1 3 2 4
a b a a b b a b