__all__ = ['encode', 'decode'] ALPHABET = '23456789abcdefghijkmnpqrstuvwxyz' ALPHABET_INVERSE = [ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, -1, 19, 20, -1, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, ] def encode(input: int, pad_to_length: int) -> str: digits = [] while input: digits.append(ALPHABET[input & 31]) input >>= 5 while len(digits) < pad_to_length: digits.append(ALPHABET[0]) return ''.join(digits[::-1]) def decode(input: str) -> int | None: out = 0 for c in input: try: n = ALPHABET_INVERSE[ord(c)] except IndexError: return None if n == -1: return None out = (out << 5) | n return out