ClearAll[SpacesDistributeOverN, Possibilities] SpacesDistributeOverN[s_, p_] := Flatten[ Permutations /@ (Join[#, ConstantArray[0, p - Length[#]]] & /@ IntegerPartitions[s, p]), 1] Possibilities[hint_, len_] := Module[{p = hint, l = len, b = Length[hint], Spaces, out}, Spaces = # + (Prepend[Append[ConstantArray[1, b - 1], 0], 0]) & /@ (SpacesDistributeOverN[l - Total@p - (b - 1), b + 1]); out = Flatten /@ ( Riffle[#, Map[Table[1, {#}] &, p, {1}]] & /@ Map[Table[0, {#}] &, Spaces, {2}]); StringJoin @@@ (out /. {0 -> ".", 1 -> "#"}) ] Possibilities[{}, len_] := Module[{}, {StringJoin[ConstantArray[".", len]]} ] Possibilities[{2, 1}, 5] Possibilities[{}, 5] Possibilities[{8}, 10] Possibilities[{2, 3, 2, 3}, 15] Possibilities[{2, 3}, 5]