## CEOI '19 P3 - Cubeword

View as PDF

Points: 20 (partial)
Time limit: 0.6s
Memory limit: 1G

Problem type
Allowed languages
Ada, Assembly, Awk, Brain****, C, C#, C++, COBOL, CommonLisp, D, Dart, F#, Forth, Fortran, Go, Groovy, Haskell, Intercal, Java, JS, Kotlin, Lisp, Lua, Nim, ObjC, OCaml, Octave, Pascal, Perl, PHP, Pike, Prolog, Python, Racket, Ruby, Rust, Scala, Scheme, Sed, Swift, TCL, Text, Turing, VB, Zig

A cubeword is a special type of a crossword. When building a cubeword, you start by choosing a positive integer : the side length of the cube. Then, you build a big cube consisting of unit cubes. This big cube has edges. Then, you discard all unit cubes that do not touch the edges of the big cube. The figure below shows the object you will get for .

Finally, you assign a letter to each of the unit cubes in the object. You must get a meaningful word along each edge of the big cube. Each edge can be read in either direction, and it is sufficient if one of the two directions of reading gives a meaningful word.

The figure below shows the object for in which some unit cubes already have assigned letters. You can already read the words SUBMIT, ACCEPT and TURING along three edges of the big cube.

You are given a list of valid words. Each word from the wordlist may appear on arbitrarily many edges of a valid cubeword. Find and report the number of different cubewords that can be constructed, modulo .

If one cubeword can be obtained from another by rotation or mirroring, they are considered distinct.

#### Input

The first line contains a single integer – the number of words.

Then, lines follow. Each of these lines contains one word that can appear on the edges of the big cube. The length of each word is between and , inclusive.

It is guaranteed that all words are different.

#### Output

Output a single integer, the number of distinct cubewords for the given list of valid words modulo .

#### Scoring

Subtask ( points): the words consist only of letters a - f (lowercase)

Subtask ( points): the words consist only of letters a - p (lowercase)

Subtask ( points): the words consist of letters a - p (lowercase) and A - P (uppercase)

Subtask ( points): the words consist of letters a - z (lowercase), A - Z (uppercase) and digits 0 - 9

#### Sample Input 1

1
radar

#### Sample Output 1

1

#### Sample Input 2

1
robot

#### Sample Output 2

2

#### Sample Input 3

2
FLOW
WOLF

#### Sample Output 3

2

#### Sample Input 4

2
baobab
bob

#### Sample Output 4

4097

#### Sample Input 5

3
TURING
SUBMIT
ACCEPT

#### Sample Output 5

162

#### Sample Input 6

3
MAN1LA
MAN6OS
AN4NAS

#### Sample Output 6

114

#### Note

In the first sample, the only possibility is for the word radar to be on each edge of the cube.

In the second sample, there are two cubes, which are just rotations of each other – the word robot is on every edge, and the difference between the two cubes is whether the lower left front corner contains r or t.

The third sample is similar to the second one. The fact that we can read the word on each edge in both directions does not affect the answer.

In the fourth sample, there is one cube with the word bob on each edge. There are also cubes with the word baobab on each edge. (For each of the edges, we have two possible directions in which the word baobab can appear.)