Podam prostszy przykład, lecz chce użyć do tego skryptu innych danych (w większej ilości), aby nie siedzieć nad tym rok lub więcej

Mam elementy: a, b, c; chcę mieć zbiory 2 elementowe (z powtórzeniami) { x, y }.
Wynikiem tego jest: {a,a}{a,b}{a,c}{b,a}{b,b}{b,c}{c,a}{c,b}{c,c}.
Chciałbym abym dał skryptowi liste elementów i jakiej wielkości mają być zbiory, a skrypt wypisze mi wszystkie opcje, lub zapisze mi to w bazy danych (ale z bazą danych już sobie sam poradzę.
Niestety nie mam pomysłu co do tego skryptu i a tym zwracam się do was o pomoc.