#P2741. Colored Cubes

Colored Cubes

题目描述

有多个彩色立方体。这些立方体大小相同,但颜色可能不同。每个立方体的每个面都有单一颜色。同一个立方体的不同面颜色可以相同也可以不同。

如果通过适当的旋转可以使两个立方体的颜色看起来完全相同,则称这两个立方体颜色相同。例如,图2中的两个立方体颜色相同。如果一组立方体中任意两个立方体颜色相同,则称这组立方体颜色相同。

立方体与其镜像的颜色不一定相同。例如,图3中的两个立方体颜色不相同。

可以通过重新涂色某些面(无论这些面原本是什么颜色)使得给定的一组立方体颜色相同。例如,图4中,重新涂色四个面可以使三个立方体颜色相同,而重新涂色更少的面则无法实现。

你的任务是编写一个程序,计算给定一组立方体使其颜色相同所需重新涂色的最少面数。

输入格式

输入由多个数据集组成。每个数据集包括一个头部和一个主体,按顺序出现。头部是一个包含一个正整数nn的行,主体是紧随其后的nn行。假设1n41 \leq n \leq 4。主体中的每行包含六个颜色名称,用空格分隔。颜色名称由一个或多个由连字符(-)连接的单词组成。每个单词由一个或多个小写字母组成。假设颜色名称的长度最多为2424个字符(包括连字符)。

一个数据集对应一组彩色立方体。整数nn表示立方体的数量。主体中的每一行对应一个立方体,描述其六个面的颜色。每行中的颜色顺序与图5中面的编号顺序一致。例如,一行:

color1 color2 color3 color4 color5 color6

对应的立方体颜色如图6所示。

输入以包含单个0的行结束。该行不是数据集的一部分。

输出格式

对于每个数据集,输出一行,表示使这组立方体颜色相同所需重新涂色的最少面数。

示例输入与输出

输入数据 1

3
scarlet green blue yellow magenta cyan
blue pink green magenta cyan lemon
purple red blue yellow cyan green
2
red green blue yellow magenta cyan
cyan green blue yellow magenta red
2
red green gray gray magenta cyan
cyan green gray gray magenta red
2
red green blue yellow magenta cyan
magenta red blue yellow cyan green
3
red green blue yellow magenta cyan
cyan green blue yellow magenta red
magenta red blue yellow cyan green
3
blue green green green green blue
green blue blue green green green
green green green green green sea-green
3
red yellow red yellow red yellow
red red yellow yellow red yellow
red red red red red red
4
violet violet salmon salmon salmon salmon
violet salmon salmon salmon salmon violet
violet violet salmon salmon violet violet
violet violet violet violet salmon salmon
1
red green blue yellow magenta cyan
4
magenta pink red scarlet vermilion wine-red
aquamarine blue cyan indigo sky-blue turquoise-blue
blond cream chrome-yellow lemon olive yellow
chrome-green emerald-green green olive vilidian sky-blue
0

输出数据 1

4
2
0
0
2
3
4
4
0
16

来源

Japan 2005