#P50778. 「BalticOI 2010」乐高 Lego

「BalticOI 2010」乐高 Lego

题目描述

你正在使用乐高积木来训练人工视觉系统。

本题中只有一种乐高积木—— 2×22 \times 2 的砖块。它有白(W)、灰(G)、黑(B)三种颜色。所有的积木都有无限个。
你在一个 6×66 \times 6 的底板上砌砖块。砖块边缘必须平行于底板,且砖块不能延伸到地板的外面。每块积木必须有至少一块积木支持,也就是不能浮空(但没说不可以部分悬挂)。

左:将积木放在另一个积木的顶部上的一种可行的方式。中:一种非法的方式(上层积木挂在空中)。右:另一种非法方式(上方的积木延伸到底板外)。

给出从两个角度拍摄的积木建筑的图片,试求:要建立它有多少种不同的方式。

输入格式

第一行包含 HH1H61 \le H \le 6),即建筑的高度。然后 HH 行每行 66 个字符,给出从一侧(下图中标记为 A)所见的建筑图。

ii 行的第 jj 个字符表示你从上方看第 ii 行左边的第 jj 列所看到的颜色。每个字符都可以是 WGB. 中的一种,表示一种颜色(W,GB)或孔(.)。请注意,你无法估计深度,因此只要没有其他积木挡住视线,在某个位置看到的颜色可能属于某个靠前的积木,也可能属于某个靠后的积木。

接下来 HH 行是观察者逆时针绕建筑旋转 9090 度(在下图中标记为 B)看到的图片。

输出格式

输出一行一个整数,表示不同的乐高建筑的个数。通过旋转或翻转得到的建筑算作不同。保证答案在 64 位有符号整数范围内。

样例

2
WWGG..
.BB.WW
.WGG..
WWGG..
6