Addbags[configs_List] := DeleteDuplicates[ Map[LexicographicSort, Catenate[AddbagAll /@ configs], \[Infinity]]] AddbagAll[config_] := Addbag[config, #] & /@ Position[config, bag[___], \[Infinity]] Addbag[config_, pos_] := ReplacePart[config, pos -> Append[Extract[config, pos], bag[]]] With[{n = 5}, Nest[Addbags, {cabinet[bag[]]}, n - 1] // Column]