Вид археологического вопроса: D.Версия 4 довольно старая!
<<DiscreteMath`Combinatorica`
perm1[l_,n_]:=Union[KSubsets[Flatten[Table[l,{n}]],n]]
In[70]:= perm1[{1,2,1},4]
Out[70]= {{1,1,1,1},{1,1,1,2},{1,1,2,1},{1,1,2,2},{1,2,1,1},
{1,2,1,2},{1,2,2,1},{1,2,2,2},{2,1,1,1},{2,1,1,2},
{2,1,2,1},{2,1,2,2},{2,2,1,1},{2,2,1,2},{2,2,2,1},{2,2,2,2}}
In[73]:= perm1[{1,0},3]
Out[73]= {{0,0,0},{0,0,1},{0,1,0},{0,1,1},{1,0,0},{1,0,1},{1,1,0},{1,1,1}}