n色方柱问题

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

设有n个立方体,每个立方体的每一面用红、黄、蓝、绿等n种颜色之一染色。要把这n个立方体叠成一个方形柱体,使得柱体的4个侧面的每一侧均有n种不同的颜色。试设计一个回溯算法,计算出n个立方体的一种满足要求的叠置方案。
对于给定的n个立方体以及每个立方体各面的颜色,计算出n个立方体的一种叠置方案,使得柱体的4 个侧面的每一侧均有n种不同的颜色。

Input

输入数据的第一行有1 个正整数n,0 < n < 27,表示给定的立方体个数和颜色数均为n。第2 行是n 个大写英文字母组成的字符串。该字符串的第k(0 ≤ k < n)个字符代表第k种颜色。接下来的n行中,每行有6个数,表示立方体各面的颜色。立方体各面的编号如下图所示。




图中F表示前面,B表示背面,L表示左面,R表示右面,T表示顶面,D 表示底面。相应地,2 表示前面,3 表示背面,0 表示左面,1 表示右面,5 表示顶面,4 表示底面。
例如,在示例输出文件中,第3 行的6 个数0 2 1 3 0 0分别表示第1 个立方体的左面的颜色为R, 右面的颜色为B, 前面的颜色为G, 背面的颜色为Y, 底面的颜色为R, 顶面的颜色为R。

Output

将计算出的n 个立方体的一种可行的叠置方案输出。每行6 个字符,表示立方体各面的颜色。如果不存在所要求的叠置方案,输出“No solution!”。

Sample Input

4
RGBY
0 2 1 3 0 0
3 0 2 1 0 1
2 1 0 2 1 3
1 3 3 0 2 2

Sample Output

RBGYRR
YRBGRG
BGRBGY
GYYRBB

Hint

 

Source