跳转至

积木塔

预估时间限制:0.5 秒。内存限制:128 MB。

实际时限以标准程序在目标评测环境的最慢用例中位时间乘以 \(2\) ,按 \(0.5\) 秒向上取整。参考环境见评测说明。

背景故事

三个平台上要进行一次积木塔搬运。积木都有自己的名字,搬运员需要按顺序读出每一步移动指令。

形式化问题描述

有三个平台,依次称为平台 \(A,B,C\) ;它们各自的显示名字由输入给出。初始时,\(n\) 个积木全部在平台 \(A\) ,从底到顶的次序由输入给出,另外两个平台为空。

一次移动只能取走某个平台最顶端的一个积木,放到另一个平台顶部。任意时刻,如果积木 \(Y\) 直接位于积木 \(X\) 上方,那么 \(Y\) 在初始塔中也必须位于 \(X\) 上方,允许初始时二者之间有其他积木。

把全部积木搬到平台 \(B\) ,并输出移动次数最少的一组操作。名字只是标签;积木的先后关系由初始位置决定,名字不要求互不相同。

输入格式

第一行一个整数 \(n\) .

接下来三行,分别是平台 \(A,B,C\) 的显示名字。再接下来 \(n\) 行,是初始塔从底到顶的积木名字。

每个名字占完整一行,包含 \(1\) 到 \(20\) 个英文字母、数字、半角空格或下划线。开头、内部和结尾的空格都是名字的一部分,必须保留;换行符不属于名字。

输出格式

每次移动输出一行,严格使用以下格式:

Move <block> from <source> to <target>.

将 <block>、<source>、<target> 分别替换为积木、来源平台和目标平台的完整名字;尖括号不输出。其余字母、空格和末尾英文句号按模板输出。不另外输出移动次数。

样例

样例 1

输入

2
226 A AA ____ 1026
CC
BB
1
2_

输出

Move 2_ from 226 A AA ____ 1026 to BB.
Move 1 from 226 A AA ____ 1026 to CC.
Move 2_ from BB to CC.

样例 2

输入

1
A
B
C
Only

输出

Move Only from A to B.

样例 3

输入

3
Left
Middle
Right
Large block
Mid_block
Small

输出

Move Small from Left to Middle.
Move Mid_block from Left to Right.
Move Small from Middle to Right.
Move Large block from Left to Middle.
Move Small from Right to Left.
Move Mid_block from Right to Middle.
Move Small from Left to Middle.

样例解释

第一组中,输入的三个平台名字依次对应 \(A,B,C\) .先把上方积木移到平台 \(C\) ,再把下方积木移到平台 \(B\) ,最后把上方积木移到平台 \(B\) ,共三步。

两块积木从平台 A 移到平台 B 的三步过程

图中用 \(A,B,C\) 表示平台身份,用 \(1,2\) 表示从底到顶的初始积木编号。实际输出使用输入提供的名字。

数据范围与保证

\(1\le n\le10\) .每个名字长度满足 \(1\le |S|\le20\) ,字符范围及空格规则见输入格式。

分值比例 额外条件
100% 无额外条件