program d;
const
  StrToInt: array['0'..'1'] of Byte = (0, 1); 
type
  FB = array[0..40] of Byte;
var
  X, Y, Z: FB;
  
  procedure Add(var X: FB; Index: Integer);
  begin
    if X[Index] = 1 then
    begin
      if Index = 0 then
      begin
        X[Index]:= 0;
	Add(X, Index + 1);
      end else
      if Index = 1 then
      begin
        X[Index]:= 0;
	Add(X, 0);
	Add(X, 2);
      end else
      begin
        X[Index]:= 0;
	Add(X, Index + 1);
	Add(X, Index - 2);
      end;
    end else
    begin
      X[Index]:= 1;
      if (Index > 0) and (X[Index - 1] = 1) then
      begin
        X[Index]:= 0;
	X[Index - 1]:= 0;
	Add(X, Index + 1);	  
      end else
      if X[Index + 1] = 1 then
      begin
        X[Index]:= 0;
	X[Index + 1]:= 0;
	Add(X, Index + 2);
      end;
    end; 
  end;
  
  function Len(X: FB): Integer;
  var
    I: Integer;
  begin
    for I:= 0 to 40 do
    if X[I] = 1 then Len:= I;
  end;

  procedure Canonize(var X: FB);
  var
    I: Integer;
  begin
    for I:= 1 to 40 do
    if (X[I] = 1) and (X[I - 1] = 1) then 
    begin
      X[I]:= 0;
      X[I - 1]:= 0;
      Add(X, I + 1);      
    end;
  end;
  
  procedure WriteFB(X: FB);
  var
    I: Integer;
  begin
    for I:= 40 downto 0 do
    Write(X[I]);
    Writeln;
  end;
  
var
  S: string[255];
  I, L, LX, LY, LZ: Integer;
  Second: Boolean;
begin
  while True do
  begin
    Readln(S);
    L:= Length(S);
    if L = 0 then Break;
    
    for I:= 0 to 40 do
    begin
      X[I]:= 0;
      Y[I]:= 0;
    end;

    Second:= False;
    for I:= L downto 1 do
    if S[I] = ' ' then 
    begin
      Second:= True;
      L:= I - 1;
    end else
    if not Second then Y[L - I]:= StrToInt[S[I]] 
      else X[L - I]:= StrToInt[S[I]];

    Canonize(X);
    Canonize(Y);
        
    for I:= 0 to 40 do
    Z[I]:= X[I];
    
    for I:= 0 to 40 do
    if Y[I] = 1 then 
    begin
      Add(Z, I);
{      WriteFB(Z);}
    end;

{    WriteFB(Z);}
    
    Canonize(Z);    
    
{    WriteFB(Z);}
    
    LX:= Len(X);
    LY:= Len(Y);
    LZ:= Len(Z);
    
    Write('  ');
    for I:= LZ downto 0 do
    if I <= LX then Write(X[I]) else Write(' ');
    Writeln;
    Write('+ ');
    for I:= LZ downto 0 do
    if I <= LY then Write(Y[I]) else Write(' ');
    Writeln;
    Write('  ');
    for I:= LZ downto 0 do
    Write('-');
    Writeln;
    Write('  ');
    for I:= LZ downto 0 do
    Write(Z[I]);
    Writeln;
    Writeln;
  end;

  
end.
