#USACO1643. 威斯康星方形牧场
威斯康星方形牧场
威斯康星州的春天到了,是时候将小牛犊子们送入牧场,将去年还在牧场如今已经长大的奶牛们送出牧场了。
农夫约翰的农场有五种奶牛(它们的缩写显示在括号中):根西牛(A),泽西牛(B),海福特牛(C),黑安格斯牛(D)和长角牛(E)。
这些奶牛们被放养在一个 16 英亩的正方形牧场上。
将这个牧场划分为 4×4 个的方格区域,每个区域占地 1 英亩。
每个区域内都会放养一群奶牛,同一区域内的奶牛种类相同,如下所示:
1 2 3 4
+-------
1|A B A C
2|D C D E
3|B E B C
4|C A D E
农夫约翰在安排奶牛们的放养位置时十分的小心,因为他发现两个相同种类的牛群如果挨得很近,那么奶牛们就会表现出聚众抽烟喝牛奶等不良行为。
一个牛群的邻近区域指该牛群所在的方格区域以及其上、下、左、右、左上、右上、左下、右下八个方格区域。
约翰需要用他的大卡车将长大的牛送出牧场,将年幼的牛送进牧场。
卡车每次只能运送一群奶牛,他会先拉一群小奶牛到牧场的一个方格区域内,将它们放下,再将该区域内的大奶牛装上卡车,送出牧场。
重复上述过程 16 次,就可以将小奶牛们全部送入,将大奶牛们全部送出了。
在运送的过程中,应该保证不能将小奶牛放入当前由同一种类的牛群占据的方格区域或者其邻近区域中。
当大奶牛被送走后,小奶牛就立即就位,那么在接下来的安置过程中,就要按照最新的奶牛分布情况来考虑接下来奶牛的安置位置。
非常重要的提示:农夫约翰从过去的经验中知道,他必须先移动一群 D 牛。
最初,牧场中有 3 群奶牛 A,3 群奶牛 B,4 群奶牛 C,3 群奶牛 D,3 群奶牛 E,如上所给示例所示。
这些奶牛等待着被送出。
今年新进的小奶牛中有 3 群奶牛 A,3 群奶牛 B,3 群奶牛 C,4 群奶牛 D𝐷,3 群奶牛 E。
这些奶牛等待着被送入。
现在,请你帮助约翰统计共有多少种运送方法。
输入格式
共四行,每行包含四个大写字母,表示最初等待被送走的奶牛群的种类。
输出格式
首先,输出一个可行的运送方法。
共 16行,每行包含一个字母和两个数字,表示送入奶牛种类,安置位置的行和列。
当有多种运送方法时,将 16 行的输出连在一起构成一个字符串(例如“D41C42A31 … D34”),输出字典序下构成字符串排在第一的运送方法。
然后,在新的一行,输出一个整数,表示总运送方案数。
ABAC
DCDE
BEBC
CADE
D 4 1
C 4 2
A 3 1
A 3 3
B 2 4
B 3 2
B 4 4
E 2 1
E 2 3
D 1 4
D 2 2
C 1 1
C 1 3
A 1 2
E 4 3
D 3 4
14925