{
Written by Fyodor Menshikov 07.02.2004
}
{$R+,Q+,S+}
const
   n=33;
var
   a:array[1..n]of integer;

   function min(x,y:integer):integer;
   begin
      if x<y then
         min:=x
      else
         min:=y;
   end;

   procedure go(place,rest,max:integer);
   var
      i:integer;
   begin
      if rest=0 then begin
         for i:=1 to place-2 do
            write(a[i],'+');
         writeln(a[place-1]);
      end
      else begin
         for i:=min(rest,max) downto 1 do begin
            a[place]:=i;
            go(place+1,rest-i,i);
         end;
      end;
   end;

begin
   writeln(n);
   go(1,n,n-1);
end.