def quersumme(n):
   digitsList=list(str(n));
   return (len(digitsList),
           sum((map(int,digitsList)),0));
# end def

if True:
   maxPot=9; # 8 dauert eine Weile
   for (pot,nb) in ((nx,2**(10**nx)) for nx in range(maxPot)):
       #                                       0 .. maxPot-1
       (zz,qs)=quersumme(nb);
       potS='Potenz {0:2} | '.format(pot);
       zzS= 'Ziffernzahl {0:8} | '.format(zz);
       qsS= 'Quersumme:{0:10}'.format(qs);
       print(potS+zzS+qsS);
   # end for
# end if

def ziffernInQuersumme(n):
   digitsMap={ix : 0 for ix in range(0,10)};
   digitsList=map(int,list(str(n)));
   for d in digitsList:
       digitsMap[d]+=1;
   return digitsMap;
# end def

if True:
   outStr='Zif:'+' '*4+'|';
   for ix in range(10):
       outStr=outStr+'{0:7} |'.format(ix);
   print(outStr);
   print('-'*99);

   maxPot=7; # 8
   for (pot,nb) in ((nx,2**(10**nx)) for nx in range(maxPot)):
       ziffernMap=ziffernInQuersumme(nb);
       countList=[ziffernMap[key] for key in sorted(ziffernMap.keys())];
       outStr='Pot: {0:2} |'.format(pot);
       for ct in countList:
           outStr=outStr+'{0:7} |'.format(ct);
       print(outStr);
   # end for
# end if