Problem3134--木块问题[The Blocks Problem,UVa101]

3134: 木块问题[The Blocks Problem,UVa101]

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 0  Solved: 0
[Status] [Submit] [Creator:]

Description

在早期人工智能的领域中常常会用到机器人,在这个问题中有一支机器手臂接受指令来搬动积木,而你的任务就是输出最后积木的情形。


一开始在一平坦的桌面上从左到右有n块积木(编号从0到n-1),0号积木放在0号位置上,1号积木放在1号位置上,依此类推,如下图。



机器手臂有以下几种合法搬积木的方式(a和b是积木的编号):
move a onto b:先将a和b上的积木全部归位(例如:1就放回1的最开始位罝),然后将a摞在b上面,
move a over b:先将a上的积木归位(b所在的那堆积木不动),再将a放到b所在的木块堆的顶部,
pile a onto b:先将b上方的积木全部归位,然后把a以及上面的积木一起摞到b上面
pile a over b:将a及上面的积木一起摞到b所在木块堆的顶部
quit:遇到quit时终止一组数据
前四个动作中若a=b,或者a, b在同一堆积木中,那么这样的动作算是不合法的。所有不合法的动作应该被忽略,也就是对各积木均无改变。

Input

第一行有一个正整数n(0 < n < 25),代表积木的数目(编号从0到n-1)。
接下来为机器手臂的动作命令,每个动作命令一行。
如果此动作命令为quit ,代表输入结束。

Output

输出每个积木块的最终状态。
输出编号为i的每个原始块位置(0≤i<n,其中n是块的数量),紧跟一个冒号,如果至少有一个块,冒号后面跟一个空格,然后是堆叠在该位置的木块的列表,每个块编号与其他块编号以空格分隔,行尾不要有空格
每个块位置应该有一行输出(即n行输出,其中n是第一行输入的整数)。

Sample Input Copy

10
move 9 onto 1
move 8 over 1
move 7 over 1
move 6 over 1
pile 8 over 6
pile 8 over 5
move 2 over 1
move 4 over 9
quit

Sample Output Copy

0: 0
1: 1 9 2 4
2:
3: 3
4:
5: 5 8 7 6
6:
7:
8:
9:

Source/Category