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

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

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