EDUDANT: variace s opakováním ale nemá to, že potřebuješ využít všechny hodnoty :))
pokud ale potřebuješ najít jen nějakou, tak bych udělal třeba následující algoritmus
Znaky = pole vstupních znaků
1. ověření podmínek (N <= M)
2. do S si dám indexy 0..M-1
3. foreach c from Znaky { get random x from S; remove x from S; Výstup[x] = c; }
4. foreach x from S { get random c from Znaky; Výstup[x] = c; }
V poli výstup je hledaná "variace s opakováním"