sub p{my($n,@e,$o)=@_;print if!$_{$_=join$",sort@_,$/}++;p(++$o,--$n,@e)while$n-1}p(shift) #### sub p{my($n,@e,$o)=@_;$_{$_=join$",sort@_,$/}++||print;p(++$o,$n,@e)while--$n}p pop #### sub p{my(@e,$o)=@_;$_{$_=join$",sort@_,$/}++||print;p(++$o,@e)while--$e[0]}p pop #### sub p{ my($n,@e,$o) = @_; print if ! $_{$_ = join$",sort@_,$/}++; p(++$o, --$n, @e) while $n-1; } p(shift) #### my($n,@e,$o) = @_; #note this is the same as: my $n = $_[0]; my @e = @_; my $o; #### print if ! $_{$_ = join$",sort@_,$/}++; #### p(5) outputs 5 calls p(1,4) outputs 1,4 calls p(2,3) outputs 2,3 calls(1,1,3) outputs 1,1,3 calls p(3,2) calls(2,2,1) outputs 1,2,2 calls(1,1,2,1) outputs 1,1,1,2 calls p(4,1) calls p(3,2,1) calls p(2,2,1) calls p(1,1,2,1) calls p(2,1,1,1) calls p(1,1,1,1,1) outputs 1,1,1,1,1