program lock;

var vstup : string;
var p2,p3,j, i, pocet, max, x, h : integer;
var pole : array[1..7] of byte;

procedure vypis;
var k : integer;
begin

	if p3>0 then
	begin

	for k:=1 to max do
		write(pole[k]);
	
	if ((p2+1) <> pocet) then write(' ');
	p2:=p2+1;
	
	end;

end;

procedure rek(pozice : integer);

var l : integer;
begin

	if pole[pozice] = 0 then
	begin
	
		for l:=0 to 9 do
		begin
		
			pole[pozice] := l;
			if pozice < max then
				rek(pozice+1)
			else
			begin
				vypis;
				p3:=p3+1;
			end;
		
		end;
	
	end else
	begin
		for l:=9 downto 0 do
		begin
		
			pole[pozice] := l;
			if pozice < max then
				rek(pozice+1)
			else
			begin
				vypis;
				p3:=p3+1;
			end;
		
		end;
	end;

end;

begin

	while true do
	begin
		
		p3 := 1;
		pocet := 0;
		p2:=0;
	
		readln(vstup);
		if vstup[1] = '-' then
			break;
		
		max := length(vstup);
			
		for i:=1 to max do
		begin
		
			pole[i] := ord(vstup[i]) - ord('0');
			if pole[i] <= 4 then 
				pocet := pocet + pole[i]
			else
				pocet := pocet + 9-pole[i];
			
		end;
		
		h := 10;
		
		for i:= 2 to max do
		begin
			h := h * 10;
		end;
		
		pocet := pocet + h -1;
		
		writeln(pocet);
		
		for i:=1 to max do
		begin
			if pole[i] <= 4 then 
			begin
				for j:=pole[i] downto 0 do
				begin
					if (pole[i] <> j) then begin
					pole[i] := j;
					vypis;
					end;
				end;
			end else
			begin
				for j:=pole[i] to 9 do
				begin
					if (pole[i] <> j) then begin
					pole[i] := j;
					vypis;
					end;
				end
			end;
		end;
		
		p3:=0;
		rek(1);
		
		 
	end;

end.
