#P8091. SPOJ CCCCUBE - Cube

SPOJ CCCCUBE - Cube

题目描述

设想一个大立方体,它由若干形状不同、彼此咬合的实心部件组成。

如果这些部件结合得足够紧密,那么除非切割其中某些部件,否则无法把整个立方体拆开。

我们称一个立方体是稳定的(stable),当且仅当:

在不使任何单个部件发生形变、也不切割任何部件的前提下,物理上不可能把整个立方体分离成两个或更多碎块。

现在需要判断若干个这样的立方体是否稳定。

为了描述立方体中的部件,把整个立方体划分成 n×n×nn\times n\times n 个单位小立方体,并给每个单位小立方体标记一个大写英文字母。

两个单位小立方体当且仅当满足以下两个条件时属于同一个连接结构:

  1. 它们共享一个面;
  2. 它们的字母相同。

也就是说,只有面相邻且字母相同的单位小立方体才会直接连接在一起。

请判断给定的大立方体是否稳定。

输入格式

输入最多包含 1010 个立方体。

每个立方体的描述如下:

  • 第一行包含一个整数 nn,满足 1n101\le n\le 10
  • 下一行为空行;
  • 随后给出 nn 层,每层包含 nn 个长度为 nn 的大写字母字符串;
  • 相邻两层之间有一个空行。

输入中的字母之间没有空格。

整个输入以一行单独的 0 结束。

输出格式

对于每个立方体,按输入顺序输出一行:

  • 如果该立方体稳定,输出 Yes
  • 否则输出 No

样例输入

2

AB
AB

BB
BA

3

AAA
BBB
AAA

AAA
ABA
AAA

ABA
ABA
ABA

0

样例输出

No
Yes