|
MATHEMATICA
|
submultisetQ[M_, N_]:=Or[Length[M]==0, MatchQ[{Sort[List@@M], Sort[List@@N]}, {{x_, Z___}, {___, x_, W___}}/; submultisetQ[{Z}, {W}]]];
stableQ[u_]:=Apply[And, Outer[#1==#2||!submultisetQ[#1, #2]&&!submultisetQ[#2, #1]&, u, u, 1], {0, 1}];
sps[{}]:={{}}; sps[set:{i_, ___}]:=Join@@Function[s, Prepend[#, s]&/@sps[Complement[set, s]]]/@Cases[Subsets[set], {i, ___}];
mps[set_]:=Union[Sort[Sort/@(#/.x_Integer:>set[[x]])]&/@sps[Range[Length[set]]]];
gro[m_]:=gro[m]=If[Length[m]==1, {m}, Select[Union[Sort/@Join@@(Tuples[gro/@#]&/@Select[mps[m], Length[#]>1&])], stableQ]];
Table[Sum[Length[gro[m]], {m, Flatten[MapIndexed[Table[#2, {#1}]&, #]]&/@IntegerPartitions[n]}], {n, 5}]
|