#1646. 双轨车皮编序问题

双轨车皮编序问题

题目描述

在一个列车调度站中,2\red {2} 条轨道连接到2\red {2}条侧轨处,形成2\red {2} 个铁路转轨栈。其中左边轨道为车皮入口,编号为A\red {A};右边轨道为出口,编号为D2\red {D,2} 个铁路转轨栈分别编号为C\red {C}D\red {D},如下图所示。编号为ab\red {a,b,…},的n\red {n} 个车皮依序停放在车皮入口处。调度室要安排各车皮进出栈次序,使得在出口处各车皮按照预先指定的顺序依次出站。车皮移动时只能按照从左到右的方向移动。

imp 给定车皮数n\red {n},以及各车皮的出站顺序,编程计算最优调度方案,使得移动车皮的总次数最少。

输入格式

第一行有1\red {1} 个正整数n\red {n},表示车皮数。接下来的1\red {1} 行中,是预先指定的车皮出站顺序。

输出格式

文件的第一行是最少移动次数m\red {m}。接下来的m\red {m}行是对应于最优方案的m\red {m}次移动。每次移动用形如CXY\red {‘C X Y’}3\red {3} 个字符来表示,其中C\red {C} 表示车皮编号,X\red {X}表示起始栈轨号,Y\red {Y} 表示目标栈轨号。如果无法调度则输出“No Solution!”

样例

输入样例

3

abc

输出样例

5

c A B

b A B

a A D

b B D

c B D