uses crt;
var s,n:string;
d:array[0..1000] of string;
i,j,t,ii,k:integer;
procedure swap(var str1,str2:string);
var s:string;
begin
s:=str1;str1:=str2;str2:=s;
end;
function sosanh(var str1,str2:string):boolean;
begin
if length(str1)>length(str2) then
exit(false)
else if length(str1)=length(str2) then
if str1>str2 then
exit(false);
exit(true);
end;
begin
clrscr;
readln(n);
for i:=1 to length(n) do
t:=t+ord(n[i])-48;
if t mod 3=0 then
begin
inc(k);
d[k]:=n;
end;
for i:=1 to length(n)-1 do
begin
for j:=1 to length(n)-i+1 do
begin
s:=n;t:=0;
delete(s,j,i);
while (s[1]='0') and (length(s)<>0) do delete(s,1,1);
for ii:=1 to length(s) do
t:=t+ord(s[ii])-48;
if length(s)<>0 then
if t mod 3=0 then
begin
inc(k);
d[k]:=s;
end;
end;
end;
for i:=1 to k-1 do
for j:=i+1 to k do
if sosanh(d[i],d[j])=false then
swap(d[i],d[j]);
d[0]:='';
for i:=1 to k do
if sosanh(d[i],d[i-1])=false then
writeln(d[i]);
readkey;
end.