



"""simple docstring"""





from __future__ import annotations

from enum import Enum, unique
from typing import TypeVar

# Create a generic variable that can be 'Enum', or any subclass.
SCREAMING_SNAKE_CASE				:     Optional[Any]          =	TypeVar('''T''', bound='''Enum''')


@unique
class       __lowerCamelCase	(   a__    ):
   __UpperCamelCase									=   80
   __UpperCamelCase									=   70
   __UpperCamelCase									=   60
   __UpperCamelCase									=   50
   __UpperCamelCase									=   40
   __UpperCamelCase									=   30
   __UpperCamelCase									=   20
   __UpperCamelCase									=   10





@unique
class       __lowerCamelCase	(   a__    ):
   __UpperCamelCase									=   24
   __UpperCamelCase									=   21
   __UpperCamelCase									=   18
   __UpperCamelCase									=   15
   __UpperCamelCase									=   12
   __UpperCamelCase									=   9
   __UpperCamelCase									=   6
   __UpperCamelCase									=   3
   __UpperCamelCase									=   2
   __UpperCamelCase									=   1
   __UpperCamelCase									=   -1
   __UpperCamelCase									=   -2
   __UpperCamelCase									=   -3
   __UpperCamelCase									=   -6
   __UpperCamelCase									=   -9
   __UpperCamelCase									=   -12
   __UpperCamelCase									=   -15
   __UpperCamelCase									=   -18
   __UpperCamelCase									=   -21
   __UpperCamelCase									=   -24







   @classmethod
   def 							A__						(cls				):




      '''simple docstring'''




      return {unit.name: unit.value for unit in cls if unit.value > 0}







   @classmethod
   def 							A__						(cls				):




      '''simple docstring'''




      return {unit.name: unit.value for unit in cls if unit.value < 0}






def 	__UpperCAmelCase					(       snake_case_  :  Tuple   )							->	str:






   """simple docstring"""


   _lowerCAmelCase					     =		SIUnit.get_positive() if value > 0 else SIUnit.get_negative()
   for name_prefix, value_prefix in prefixes.items():
      _lowerCAmelCase					     =		value / (10**value_prefix)
      if numerical_part > 1:
         return F"""{numerical_part!s} {name_prefix}"""
   return str(snake_case_   )






def 	__UpperCAmelCase					(       snake_case_  :  str   )							->	str:






   """simple docstring"""


   for prefix in BinaryUnit:
      _lowerCAmelCase					     =		value / (2**prefix.value)
      if numerical_part > 1:
         return F"""{numerical_part!s} {prefix.name}"""
   return str(snake_case_   )


if __name__ == "__main__":
  import doctest

  doctest.testmod()




"""simple docstring"""





def 	__UpperCAmelCase					(       snake_case_  :  Optional[int]   ,	snake_case_  :  List[str]   )							->	Optional[int]:






   """simple docstring"""


   if n < 0:
      return 0
   # table[i] represents the number of ways to get to amount i
   _lowerCAmelCase					     =		[0] * (n + 1)

   # There is exactly 1 way to get to zero(You pick no coins).
   _lowerCAmelCase					     =		1

   # Pick all coins one by one and update table[] values
   # after the index greater than or equal to the value of the
   # picked coin
   for coin_val in s:
      for j in range(snake_case_   ,	n + 1   ):
         table[j] += table[j - coin_val]

   return table[n]


if __name__ == "__main__":
  import doctest

  doctest.testmod()