Jodie Foster needs your help! She's receiving datasheets from outer space again. They're definitely arriving as sides of a cube, but this time the trouble is it seems like there's very few actually interesting cubes. The vast majority of the cubes look like repeats.
Your program will receive a set of unfolded cube descriptions in a terrible format. Your job will be to parse all of these terrible cube descriptions and then output only the first instance of each unique cube you find, in the format and order you received it.
A cube face here is simply an N
xN
square of case-sensitive arbitrary
alpha-numeric characters. Here's an example of a cube face:
BAA
ABA
ABB
We can rotate this cube face clockwise 90 degrees, 180 degrees, and 270 degrees:
AAB BBA AAB
BBA ABA ABB
BAA AAB BAA
The above are all equivalent cube faces. If we were to take 6 of these faces we could make a cube in three dimensions. Unfolded, such a cube might look like this:
BAA
ABA
ABB
BAABAABAABBA
ABAABAABAABA
ABBABBABBAAB
BAA
ABA
ABB
With the individual faces separated this looks like:
BAA
ABA
ABB
BAA BAA BAA BBA
ABA ABA ABA ABA
ABB ABB ABB AAB
BAA
ABA
ABB
There's lots of ways to unfold any given cube. Your job is to understand the relationships between the cube faces making up the cube and determine which cubes (after refolding and rotations) you haven't seen before that the unfolded cubes in the input describe.
D
BCAC
A
BCDB
BBAB
AABA
AACA
BBDB
ABCC
CABC
BBAC
DBABAD
BBDDCA
DD
DD
AB
CD
AC
DB
AB
BACBAACC
BBBBBCBD
AA
AA
D
BCAC
A
BCDB
BBAB
AABA
AACA
BBDB
ABCC
CABC
BBAC
DBABAD
BBDDCA
DD
DD