3 of 4 added 108 characters in body

Stax, 23 21 bytes

å╘┤‼¬½P¥ë└w↕⌐î◘E{╟u!Ö


Run and debug online!

Thanks for @recursive for saving 2 bytes.

Takes a very long time to run. A more reasonable/feasible version is

Ç≡╨áiS║çdèû.#-Gî☺└╨◙σφ+


Run and debug online!

Explanation

Uses the unpacked version to explain.

w|Nc_:=nGyG|*{E-!f+}ch+2B
w                            Loop anything before } while
|N                          Next permutation (starting from the input)
c_:=                      Index where the current array has the same element as the input (*)
}ch+2B    Define a block that finds all contiguous pairs in current string, including the pair [last element, first element]
nG                    Apply the defined block to current string
yG                  Do the same for the input
|*                Outer product, contains pairs (which themselves are pairs) constructed from the last two array.
{   f           Only keep pairs
E-!            whose two elements have the same set of characters
+          Prepend the array at step (*).
This is used as the condition for the while loop