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.
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 $1\le i \le n$. Our aim is to find a $L$-constrained square-free word of length $n$.
For simplicity assume later that each $L_i$ is of size 5. We treat the constructed word $u$ 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 $\HalfSquare(u)$ be the maximal half-length of the suffix of $u$ that is a square.
Denote by $symbol(j,t)$ the $t$-th symbol on the list $L_j$. Let $\RR=\{1,2,3,4,5\}^{8n}$. Informally speaking, each element $c\in\RR$ is treated as a "control sequence". During the $i$-th iteration of the Algorithm Hist below, the letter $symbol(j,c[i])$ is inserted at the $j$-th position of $u$ by pushing it onto the stack.
Algorithm Hist runs a naive backtracking process controlled by the sequence $c\in \RR$. The result is successful if Hist$(c)=(u,\beta)$, where $|u|=n$, in this case $u$ is square-free.
\begin{algorithmic} \STATE $(u,i)\leftarrow (\mbox{ empty stack},1)$ \WHILE{$i\leq 8n$ and $|u|\lt n$} \STATE push $symbol(c[i],|u|+1)$ \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}
Hist$(c)$ records history of the computation: 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 information is sufficient to reconstruct the value of $c$.