





"""simple docstring"""





import hashlib
from typing import Union






def 	__UpperCAmelCase					(       snake_case_  :  Union[str, int, bytes]   )							->	bytes:






   """simple docstring"""


   if isinstance(snake_case_   ,	snake_case_   ):
      # Data already in bytes, returns as it as
      return hash_data
   elif isinstance(snake_case_   ,	snake_case_   ):
      # We keep the data as it as for it ot be later encoded to UTF-8
      # However replace `\\` with `/` for Windows compatibility
      _lowerCAmelCase					     =		hash_data.replace("""\\"""   ,	"""/"""   )
   elif isinstance(snake_case_   ,	snake_case_   ):
      _lowerCAmelCase					     =		str(snake_case_   )
   else:
      # If data is not of the required type, raise error
      raise InvalidKeyError(snake_case_   )

   return hash_data.encode("""utf-8"""   )


class       __lowerCamelCase	(   __lowercase    ):







   def __init__(self       ,	lowerCamelCase				):




      '''simple docstring'''




      _lowerCAmelCase					     =		"""\nFAILURE TO GENERATE DATASET: Invalid key type detected"""
      _lowerCAmelCase					     =		f"""\nFound Key {hash_data} of type {type(lowerCamelCase				)}"""
      _lowerCAmelCase					     =		"""\nKeys should be either str, int or bytes type"""
      super().__init__(f"""{self.prefix}{self.err_msg}{self.suffix}"""				)





class       __lowerCamelCase	(   __lowercase    ):







   def __init__(self       ,	lowerCamelCase       ,	lowerCamelCase       ,	lowerCamelCase=""				):




      '''simple docstring'''




      _lowerCAmelCase					     =		key
      _lowerCAmelCase					     =		duplicate_key_indices
      _lowerCAmelCase					     =		fix_msg
      _lowerCAmelCase					     =		"""Found multiple examples generated with the same key"""
      if len(lowerCamelCase				) <= 20:
         _lowerCAmelCase					     =		f"""\nThe examples at index {", ".join(lowerCamelCase				)} have the key {key}"""
      else:
         _lowerCAmelCase					     =		f"""\nThe examples at index {", ".join(duplicate_key_indices[:20]				)}... ({len(lowerCamelCase				) - 20} more) have the key {key}"""
      _lowerCAmelCase					     =		"""\n""" + fix_msg if fix_msg else """"""
      super().__init__(f"""{self.prefix}{self.err_msg}{self.suffix}"""				)





class       __lowerCamelCase	:







   def __init__(self       ,	lowerCamelCase				):




      '''simple docstring'''




      _lowerCAmelCase					     =		hashlib.mda(_as_bytes(lowerCamelCase				)				)







   def 							A__						(self       ,	lowerCamelCase				):




      '''simple docstring'''




      _lowerCAmelCase					     =		self._split_mda.copy()
      _lowerCAmelCase					     =		_as_bytes(lowerCamelCase				)
      mda.update(lowerCamelCase				)
      # Convert to integer with hexadecimal conversion
      return int(mda.hexdigest()       ,	16				)




"""simple docstring"""





from itertools import combinations_with_replacement






def 	__UpperCAmelCase					(       snake_case_  :  int = 100   )							->	int:






   """simple docstring"""


   _lowerCAmelCase					     =		[*list(range(1   ,	21   )   ), 25]
   _lowerCAmelCase					     =		[2 * x for x in range(1   ,	21   )] + [50]
   _lowerCAmelCase					     =		[3 * x for x in range(1   ,	21   )]
   _lowerCAmelCase					     =		singles + doubles + triples + [0]

   _lowerCAmelCase					     =		0
   _lowerCAmelCase					     =		42
   _lowerCAmelCase					     =		42
   _lowerCAmelCase					     =		42
   _lowerCAmelCase					     =		42

   for double in doubles:
      for throwa, throwa in combinations_with_replacement(snake_case_   ,	2   ):
         _lowerCAmelCase					     =		double + throwa + throwa
         if checkout_total < limit:
            num_checkouts += 1

   return num_checkouts


if __name__ == "__main__":
  print(F'{solution() = }')