Как найти все возможные перестановки с сочетаниями?
Построить граф и решать задачу коммивояжера, с модификацией на то, что вам не нужно обходить все вершины и нужны все решения.
Третий вариант это 1 или 2. :-)