uses crt;
var st,s,k,max:string;
i,dem:byte;
d:array['A'..'Z'] of byte;
begin
clrscr;
readln(st);
// a.
while pos(#32#32,st)<>0 do delete(st,pos(#32#32,st),1);
if st[1]=' ' then delete(st,1,1);
if st[length(st)]=' ' then delete(st,length(st),1);
writeln(st);
// b.
st[1]:=upcase(st[1]);
for i:=pos(#32,st) to length(st) do
if st[i]=#32 then
st[i+1]:=upcase(st[i+1]);
writeln(st);
// c.
s:=st+' ';
max:='';
while pos(#32,s)<>0 do
begin
k:=copy(s,1,pos(#32,s)-1);
if length(max)<length(k) then
max:=k;
delete(s,1,pos(#32,s));
end;
writeln(max);
// d.
st:=upcase(st);
dem:=0;
for i:=1 to length(st) do
if st[i]<>#32 then
begin
inc(d[st[i]]);
if d[st[i]] = 1 then inc(dem);
end;
writeln(dem);
readkey;
end.