# pyright: strict import re from itertools import chain from sys import stdin nums = { "zero": 0, "one": 1, "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9, } forward = re.compile("|".join(chain(nums.keys(), (str(n) for n in nums.values())))) reverse = re.compile( "|".join(chain((k[::-1] for k in nums.keys()), (str(n) for n in nums.values()))) ) def p1_impl(s: str) -> int: nums = [int(n) for n in s if n.isdigit()] return nums[0] * 10 + nums[-1] def p2_impl(s: str) -> int: match = forward.search(s) if not match: raise ValueError num = match.group() first = int(nums.get(num, num)) match = reverse.search(s[::-1]) if not match: raise ValueError num = match.group()[::-1] last = int(nums.get(num, num)) return first * 10 + last inp = [line.rstrip() for line in stdin] print(sum(p1_impl(i) for i in inp)) print(sum(p2_impl(i) for i in inp))