var s,s1:string;
i,j,count:integer;
begin
read(s);
for i:=length(s) downto 2 do
for j:=2 to i do
if s[j]<s[j-1] then begin
swap(s[j],s[j-1]);
s1:=s;
end;
//сортируем строку в алфавитном порядке чтобы потом было легче
//считать количество встреч одного и того же символа
count:=1;
write(s1[1],': ');
//первый символ в любом случае встречается один раз
for i:=2 to length(s1) do
if s1[i]=s1[i-1] then inc(count) else begin
writeln(count);
write(s1[i],': ');
count:=1
//считаем количество совпадений для каждого символа
end.
var s,s1:string;
i,j,count:integer;
begin
read(s);
for i:=length(s) downto 2 do
for j:=2 to i do
if s[j]<s[j-1] then begin
swap(s[j],s[j-1]);
s1:=s;
end;
//сортируем строку в алфавитном порядке чтобы потом было легче
//считать количество встреч одного и того же символа
count:=1;
write(s1[1],': ');
//первый символ в любом случае встречается один раз
for i:=2 to length(s1) do
if s1[i]=s1[i-1] then inc(count) else begin
writeln(count);
write(s1[i],': ');
count:=1
end;
//считаем количество совпадений для каждого символа
writeln(count);
end.