A colleague of mine was curious about the number of possible start-configurations in a game. The game itself is not known to me, but the question which he formulated as urn problem was interesting.
Urn problem:
Assume we have an urn containing 100 balls. The balls are colored, 25 are red, 25 blue, 25 green and 25 are black. We pick four balls without replacement and repeat this step until the urn is empty.
We so obtain 25 groups of four balls each and the question is: how many configurations of this type are possible? Thereby we may assume the order of the $4$ balls in each group is not relevant as well as the order of the $25$ groups is not relevant.
A reformulation:
Given an alphabet $V=\{1,2,3,4\}$ we consider $4$-letter words $x_1x_2x_3x_4$ with $1\leq x_1\leq x_2\leq x_3\leq x_4\leq 4$ when considered as numbers.
These $4$-letter words are building blocks of words of length $100$. We take $25$ blocks of this kind to form a $100$-letter word $w=b_1b_2\ldots b_{25}$ with the property that $b_j\leq b_{j+1}, 1\leq j\leq 25$ when considered as numbers.
Question: How many words of this type contain exactly $25$ characters of each of the characters $j\in V, 1\leq j\leq 4$.
In general we are given an alphabet $V=\{1,2,\ldots,q\}$ with size $|V|=q$.
(a) We consider words of length $N$ and building blocks $x_1x_2\ldots x_M$ of size $M$ with $1\leq x_1\leq x_2\leq \cdots \leq x_M\leq q$ and $M|N$, i.e. $N$ being an integer multiple of $N$.
(b) The words are of the form $w=b_1b_2\ldots b_{N/M}$ with $b_j\leq b_{j+1}, 1\leq j \leq N/M-1$.
(c) We are looking for the number $\color{blue}{A_q(N,M)}$, the number of words as specified in (a) and (b) which contain $N/q$ characters of each of the characters $j\in V, 1\leq j\leq q$ implying that $N$ is an integer multiple of $q$ as well.
In this setting the urn problem is asking for $\color{blue}{A_4(100,4)}$.
The number of building blocks of $A_q(N,M)$ can be easily determined. It is \begin{align*} \sum_{1\leq x_1\leq x_2\leq\cdots\leq x_M\leq q}1=\binom{M+q-1}{M}\tag{1} \end{align*}
A generating function of (1) can be easily derived. We have \begin{align*} \sum_{M=0}^\infty\sum_{q=0}^\infty x^My^q\binom{M+q-1}{M}&=\frac{1-x}{1-x-y}\\ &=1+y\left(1+x+x^2+x^3+x^4+\cdots\right)\\ &\qquad+y^2\left(1+2x+3x^2+4x^3+5x^4+\cdots\right)\\ &\qquad+y^3\left(1+3x+6x^2+10x^3+\color{blue}{15}x^4+\cdots\right)\\ &\qquad\cdots \end{align*} Denoting with $[x^M]$ the coefficient of $x^M$ in a series we see for instance $[x^4y^3]\frac{1-x}{1-x-y}=\binom{6}{2}=15$ which is the number of valid building blocks of size $4$ when given a three letter alphabet $V=\{1,2,3\}$. These $15$ building blocks are \begin{align*} 1111\quad1122\quad1222\quad1333\quad2233\\ 1112\quad1123\quad1223\quad2222\quad2333\\ 1113\quad1133\quad1233\quad2223\quad3333\\ \end{align*}
The difficult part (at least for me) is to determine the number of valid words $A_q(N,M)$ which can be generated from these building blocks. I've tried to derive a generating function which describes this scenario, but I wasn't successful up to now.
Posets: Another approach could be using posets based upon the approach:
Start with an empty word and append $N/M$ times a building block respecting the ordering given in (b).
Derive a generating function for the number of valid posets.
In order to better see the situation, here is a manageable example. We are looking for $A_2(12,M)$ the number of words of length $12$ from a two-letter alphabet with different block-sizes $M$ following (a) - (c) from above. The Hasse-diagrams for $M=2,3,4,6$ are:
We see graded posets of length $N/M$ with $A_2(12,2)=A_2(12,6)=4$ and $A_2(12,3)=A_2(12,4)=5$ indicating the symmetry \begin{align*} A_q(N,M)=A_q(N,N/M) \end{align*}
Here is a list of small values of $A_2(N,M)$: $$ \begin{array}{r|rrrrrr} M&1&2\\ A_2(2,M)&1&1\\ \hline M&1&2&4\\ A_2(4,M)&1&2&1\\ \hline M&1&2&3&6\\ A_2(6,M)&1&2&2&1\\ \hline M&1&2&4&8\\ A_2(8,M)&1&3&3&1\\ \hline M&1&2&5&10\\ A_2(10,M)&1&3&3&1\\ \hline M&1&2&3&4&6&12\\ A_2(12,M)&1&4&5&5&4&1\\ \end{array} $$
Summary: The question is how to find a formula for $A_q(N,M)$ or how to derive a generating function for these numbers. Alternatively is there an appropriate technique to count the number of posets corresponding to $A_q(N,M)$?

It would appear that these are multisets of multisets which may be enumerated using the Polya Enumeration Theorem (PET), same as what was posted at the following MSE link.
The answer is a special case of what was presented there and is given by
$$\left[\prod_{k=1}^q A_k^{N/q}\right] Z\left(S_{N/M}; Z\left(S_M; \sum_{k=1}^q A_{k}\right)\right).$$
In terms of combinatorial classes we have made use of the unlabeled class
$$\def\textsc#1{\dosc#1\csod} \def\dosc#1#2\csod{{\rm #1{\small #2}}} \textsc{MSET}_{=N/M} \left(\textsc{MSET}_{=M} \left(\sum_{k=1}^q \mathcal{A}_{k}\right)\right).$$
The linked post documents how to compute the cycle index of the symmetric group and how to substitute $Z(S_M)$ into $Z(S_{N/M}).$
The question is, why can we use multisets here? The answer is that there is a one-to-one mapping between those multisets and what OP calls building blocks. Every block obviously corresponds to exactly one multiset and every multiset to one block, namely by ordering its constituents. The same thing happens with multisets of blocks.
This was implemented in Maple and here are a few sample results that a potential contributor may compare to their work and / or use to verify that we have the correct understanding of the problem.
> seq(A(2,12,M), M in divisors(12)); 1, 4, 5, 5, 4, 1 > seq(A(3,12,M), M in divisors(12)); 1, 15, 25, 23, 10, 1 > seq(A(4,12,M), M in divisors(12)); 1, 47, 93, 70, 22, 1 > seq(A(4,20,M), M in divisors(20)); 1, 306, 2505, 1746, 73, 1 > seq(A(5,20,M), M in divisors(20)); 1, 2021, 19834, 11131, 191, 1The Maple code for the above goes as follows. The reader is invited to present their results in a language of their choice for a Rosetta stone effect.
with(combinat); with(numtheory); pet_cycleind_symm := proc(n) option remember; if n=0 then return 1; fi; expand(1/n* add(a[l]*pet_cycleind_symm(n-l), l=1..n)); end; pet_varinto_cind := proc(poly, ind) local subs1, subsl, polyvars, indvars, v, pot; polyvars := indets(poly); indvars := indets(ind); subsl := []; for v in indvars do pot := op(1, v); subs1 := [seq(polyvars[k]=polyvars[k]^pot, k=1..nops(polyvars))]; subsl := [op(subsl), v=subs(subs1, poly)]; od; subs(subsl, ind); end; pet_cycleind_comp := proc(idxtrg, idx) local varstrg, vars, vt, sbstrg, sbs, len; varstrg := indets(idxtrg); vars := indets(idx); sbstrg := []; for vt in varstrg do len := op(1, vt); sbs := [seq(v = a[op(1, v)*len], v in vars)]; sbstrg := [op(sbstrg), a[len] = subs(sbs, idx)]; od; expand(subs(sbstrg, idxtrg)); end; A := proc(q, N, M) option remember; local cind_block, cind_word, cind_comp, vars, gf, vidx; if N mod q > 0 or N mod M > 0 then return FAIL; fi; cind_block := pet_cycleind_symm(M); cind_word := pet_cycleind_symm(N/M); cind_comp := pet_cycleind_comp(cind_word, cind_block); vars := add(A[p], p=1..q); gf := expand(pet_varinto_cind(vars, cind_comp)); for vidx to q do gf := coeff(gf, A[vidx], N/q); od; gf; end;Addendum. With the above answer we compute the compound cycle index of the operator
$$\textsc{MSET}_{=N/M}(\textsc{MSET}_{=M}(\cdot))$$
and then substitute the variables into this cycle index. M. Scheuer in his answer suggests a different approach where we substitute the variables into the first cycle index, obtaining the multisets, and then substitute into $Z_{N/M}.$ Experimental data indicate that this approach is superior. The same effect can be achieved by not expanding the compound cycle index into its constitutents. This yields the following Maple code (duplicate code omitted).
pet_cycleind_comp := proc(idxtrg, idx) local varstrg, vars, vt, sbstrg, sbs, len; varstrg := indets(idxtrg); vars := indets(idx); sbstrg := []; for vt in varstrg do len := op(1, vt); sbs := [seq(v = a[op(1, v)*len], v in vars)]; sbstrg := [op(sbstrg), a[len] = subs(sbs, idx)]; od; subs(sbstrg, idxtrg); end; A := proc(q, N, M) option remember; local cind_block, cind_word, cind_comp, vars, gf, vidx; if N mod q > 0 or N mod M > 0 then return FAIL; fi; cind_block := pet_cycleind_symm(M); cind_word := pet_cycleind_symm(N/M); cind_comp := pet_cycleind_comp(cind_word, cind_block); vars := add(A[p], p=1..q); gf := expand(pet_varinto_cind(vars, cind_comp)); for vidx to q do gf := coeff(gf, A[vidx], N/q); od; gf; end; AX := proc(q, N, M) option remember; local cind_block, cind_word, cind_comp, vars, blocks, gf, vidx; if N mod q > 0 or N mod M > 0 then return FAIL; fi; cind_block := pet_cycleind_symm(M); vars := add(A[p], p=1..q); blocks := pet_varinto_cind(vars, cind_block); cind_word := pet_cycleind_symm(N/M); gf := expand(pet_varinto_cind(blocks, cind_word)); for vidx to q do gf := coeff(gf, A[vidx], N/q); od; gf; end;