|
MATHEMATICA
|
submultisetQ[M_, N_]:=Or[Length[M]==0, MatchQ[{Sort[List@@M], Sort[List@@N]}, {{x_, Z___}, {___, x_, W___}}/; submultisetQ[{Z}, {W}]]];
multsubs[set_, k_]:=If[k==0, {{}}, Join@@Table[Prepend[#, set[[i]]]&/@multsubs[Drop[set, i-1], k-1], {i, Length[set]}]];
Table[Length[Select[multsubs[Tuples[Range[n], 2], n], And[Union[First/@#]==Range[Max@@First/@#], Union[Last/@#]==Range[Max@@Last/@#], OrderedQ[Sort[Map[Last, GatherBy[Sort[Reverse/@#], First], {2}], submultisetQ], submultisetQ], OrderedQ[Sort[Sort/@Map[Last, GatherBy[#, First], {2}], submultisetQ], submultisetQ]]&]], {n, 6}]
|