var sin:string;
    Sum:longint;
    baseS,s2:string;
    l,l2:longint;
    slen,baseslen,s2len:longint;
    DynArray:array[0..35] of longint;
procedure UpDateSum(s:string;pos:longint);
var l:longint;
    sum2:longint;
begin
   sum2:=0;
   if (s[pos+1]<>'0')  then begin
      for l:=1 to baseslen-1 do if l+pos<=s2len then begin
         if DynArray[pos+l]=-1 then UpDateSum(s,pos+l);
	 Sum2:=Sum2+DynArray[pos+l];
      end;
      if (baseslen+pos<=s2len) and (copy(s,pos+1,baseslen)<bases) then begin
         if DynArray[pos+baseslen]=-1 then UpDateSum(s,pos+baseslen);
	 Sum2:=Sum2+DynArray[pos+baseslen];
      end;
   end else if (pos<>0) or (s2len=1) then begin
      if DynArray[pos+1]=-1 then UpDateSum(s,pos+1);
      Sum2:=Sum2+DynArray[pos+1];
   end;
   DynArray[pos]:=sum2;
end;
begin
   readln(sin);
   while (sin<>'#') do begin
   sum:=0;
   slen:=length(sin);
   for l:=1 to slen-1 do begin
      baseS:=copy(sin,slen-l+1,l);
      if bases[1]='0' then continue;
      baseslen:=l;
      s2:=copy(sin,1,slen-l);
      s2len:=slen-l;
      for l2:=0 to 35 do DynArray[l2]:=-1;
      DynArray[s2len]:=1;
      UpDateSum(s2,0);
      Sum:=Sum+DynArray[0];
   end;
   write('The code ',sin,' ');
   if sum=0 then writeln('is invalid.') else writeln('can represent ',sum,' numbers.');
   readln(sin);
   end;
end.