В математике это делается за одну строчку, поскольку есть соотв. команды. В мейпле тоже есть
combinat[partition], но чуть не хватает параметров. Она умеет раскладывать число на положительные слагаемые. Возьмем число
, тогда
partition(m+n,m+1) даст разбиения на положительные слагаемые с макс. величиной не больше
. Затем выбрать все векторы, длина которых равна
(есть ли готовая команда?) и вычесть из всего векторы
[1,...,1]. А потом для каждого полученного вектора взять все его различные перестановки. Опять же, имеется ли команда? В математике все это есть.