import re
from collections import defaultdict
_TOKENS = re.compile(r'(?:([A-Z][a-z]?)|\))(\d+)?|(\()')
def parse(formula):
counts = defaultdict(int)
stack = []
for token in _TOKENS.finditer(formula):
element, subscript, start_subformula = token.groups()
subscript = 1 if subscript is None else int(subscript)
if element:
counts[element] += 1 if subscript is None else subscript
elif start_subformula:
stack.append(counts)
counts = defaultdict(int)
else:
previous = stack.pop()
for elem, total in counts.items():
previous[elem] += total * subscript
counts = previous
for element, total in sorted(counts.items()):
print '{:>2}: {}'.format(element, total)
inputs = '''
C6H12O6
CCl2F2
NaHCO3
C4H8(OH)2
PbCl(NH3)2(COOH)2'''
for line in inputs.splitlines():
print line
parse(line)
print
aW1wb3J0IHJlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CgpfVE9LRU5TID0gcmUuY29tcGlsZShyJyg/OihbQS1aXVthLXpdPyl8XCkpKFxkKyk/fChcKCknKQoKZGVmIHBhcnNlKGZvcm11bGEpOgogICAgY291bnRzID0gZGVmYXVsdGRpY3QoaW50KQogICAgc3RhY2sgPSBbXQogICAgZm9yIHRva2VuIGluIF9UT0tFTlMuZmluZGl0ZXIoZm9ybXVsYSk6CiAgICAgICAgZWxlbWVudCwgc3Vic2NyaXB0LCBzdGFydF9zdWJmb3JtdWxhID0gdG9rZW4uZ3JvdXBzKCkKICAgICAgICBzdWJzY3JpcHQgPSAxIGlmIHN1YnNjcmlwdCBpcyBOb25lIGVsc2UgaW50KHN1YnNjcmlwdCkKICAgICAgICBpZiBlbGVtZW50OgogICAgICAgICAgICBjb3VudHNbZWxlbWVudF0gKz0gMSBpZiBzdWJzY3JpcHQgaXMgTm9uZSBlbHNlIHN1YnNjcmlwdAogICAgICAgIGVsaWYgc3RhcnRfc3ViZm9ybXVsYToKICAgICAgICAgICAgc3RhY2suYXBwZW5kKGNvdW50cykKICAgICAgICAgICAgY291bnRzID0gZGVmYXVsdGRpY3QoaW50KQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHByZXZpb3VzID0gc3RhY2sucG9wKCkKICAgICAgICAgICAgZm9yIGVsZW0sIHRvdGFsIGluIGNvdW50cy5pdGVtcygpOgogICAgICAgICAgICAgICAgcHJldmlvdXNbZWxlbV0gKz0gdG90YWwgKiBzdWJzY3JpcHQKICAgICAgICAgICAgY291bnRzID0gcHJldmlvdXMKICAgIGZvciBlbGVtZW50LCB0b3RhbCBpbiBzb3J0ZWQoY291bnRzLml0ZW1zKCkpOgogICAgICAgIHByaW50ICd7Oj4yfToge30nLmZvcm1hdChlbGVtZW50LCB0b3RhbCkKCgppbnB1dHMgPSAnJycKQzZIMTJPNgpDQ2wyRjIKTmFIQ08zCkM0SDgoT0gpMgpQYkNsKE5IMykyKENPT0gpMicnJwoKZm9yIGxpbmUgaW4gaW5wdXRzLnNwbGl0bGluZXMoKToKICAgIHByaW50IGxpbmUKICAgIHBhcnNlKGxpbmUpCiAgICBwcmludA==