# pyright: strict from dataclasses import dataclass from functools import reduce from operator import mul from sys import stdin from typing import TypeAlias CubeSet: TypeAlias = dict[str, int] @dataclass class Game: id: int subsets: list[CubeSet] def parse(inp: str) -> Game: game, subsets_str = inp.rstrip().split(": ") _, game = game.split(" ") subsets: list[dict[str, int]] = list() for s in subsets_str.split("; "): cubes = [c.split(" ") for c in s.split(", ")] subsets.append({c[1]: int(c[0]) for c in cubes}) return Game(int(game), subsets) games = [parse(l) for l in stdin] limits = {"red": 12, "green": 13, "blue": 14} # fmt: off print(sum(g.id for g in games if all(s[k] <= limits[k] for s in g.subsets for k in limits.keys() if k in s))) print(sum(reduce(mul, (max(s[k] for s in g.subsets if k in s) for k in limits.keys())) for g in games)) # fmt: on