ciao,
secondo me puoi usare 3 cicli for annidati l'uno dentro l'altro.

La soluzione però è customizzata in caso di dimensione 10 e con 3 tipi di elementi, e ho supposto che per ogni combinazione ci debba essere almeno un elemento per tipo.

Detto questo...

primo for conta da 0 a 8.
il secondo conta da [valore contatore predente] + 1 fino a 9
il terzo conta da [valore contatore predente] + 1 fino a 10.


Diversamente se vuoi una cosa generica, potrebbe essere una soluzione pensare ad una funzione ricorsiva.