Na szybko, z matematycznego punktu widzenia, wygenerowałby permutacje zbioru drużyn, usunąłbym powtórzenia i cieszył rezultatem

.
Skrypt do permutacji znajdziesz bez problemu w Googlu, a usunięcie powtórzeń to już błachostka (możesz np. napisać swoją funkcję "hashującą").
Czyli permutacja daje Ci wszystkie możliwe ciągi:
Kod
123456
123465
...
456321
...
456231
...
654321
Odrzucamy identyczne ciągi (w tym wypadku 123456, 123465 oraz 654321 opisują taką samą konfigurację). Natępnie odfiltrowujesz nielegalne konfiguracje (mając 123456 nie możemy mieć 456321) i po sprawie.
To może wyglądać strasznie, ale wcale takie nie jest. Sprawnie zaimplementowane powinno zmieścić się w kilkunastu, góra kilkudziesięciu linijkach, i działać w dobrym czasie (pomijając losowanie permutacji, które jednak też możesz zoptymalizować mając sporo dodatkowych warunków).
Niemniej jednak, zacząłbym od Googla - problem wydaje się dość standardowy, pewnie jest już wiele przemyślanych rozwiązań