For the list \[L\,=\, \{\sa{a},\sa{b},\sa{c},\sa{e}\},\, \{\sa{b},\sa{c},\sa{d},\sa{e}\},\, \{\sa{a},\sa{c},\sa{d},\sa{e}\},\,\] \[ \{\sa{c},\sa{a},\sa{b},\sa{e}\},\, \{\sa{a},\sa{b},\sa{c}\},\, \{\sa{b},\sa{c},\sa{d}\},\] \[\{\sa{a},\sa{b},\sa{c},\sa{d},\sa{e}\},\, \{\sa{a},\sa{c},\sa{d},\sa{e}\},\, \{\sa{c},\sa{a},\sa{b},\sa{d}\},\] among many others, the word $\sa{abcabdbca}$ is an $L$-constrained square-free word.
Problem 146: List-constrained square-free strings |
Let $L$ be a list of finite alphabets $(L_1,L_2,\ldots,L_n)$. A word $a_1a_2\cdots a_n$ is said to be $L$-constrained if $a_i\in L_i$ for each $i$, $1\le i \le n$. The aim is to find $L$-constrained square-free words of length $n$.
For simplicity, assume from now on that each $L_i$ is of size 5. The constructed word $u$ is treated as a stack: adding a symbol at the end corresponds to a push operation and removing the last symbol to a pop operation. Let $\pop^k$ be the sequence of $k$ pop operations. Let also $\HalfSquare(u)$ be the maximal half-length of the suffix of $u$ that is a square.
Let $\RR=\{1,2,3,4,5\}^{8n}$ and $symbol(j,t)$ denote the $t$-th symbol on the list $L_j$. Informally speaking, each element $c\in\RR$ is treated as a "control sequence". During the $i$-th iteration of the Algorithm H below, the letter $symbol(j,c[i])$ is inserted at the $j$-th position of $u$ by pushing it onto the stack.
Algorithm H runs a naive backtracking process controlled by the sequence $c\in \RR$. The result is successful if H$(c)=(u,\beta)$, where $|u|=n$ and $u$ a square-free word.
\begin{algorithmic} \STATE $(u,i)\leftarrow (\mbox{ empty stack},1)$ \WHILE{$i\leq 8n$ and $|u|\lt n$} \STATE $j \leftarrow |u|+1$ \STATE push $symbol_j(c[i])$ \IF{$u$ contains a suffix square} \STATE $k \leftarrow \frac{1}{2}\mathrm{square}(u)$ \STATE $u\leftarrow pop^k(u)$ \ENDIF \STATE $i\leftarrow i+1$ \ENDWHILE \STATE $\beta \leftarrow$ sequence of executed push and pop operations \RETURN $(u,\beta)$ \end{algorithmic}
H$(c)$ records the computation history: both the sequence of moves of the stack (pops and pushes) and the word $u$ as final content of the stack, with $|u|\le n$. This is sufficient to reconstruct the word $c$ if $|u| \lt n$.