
from math import factorial




def  lowerCamelCase__ (  a__     :     int		,					a__     :     int   )						->		int:

       # If either of the conditions are true, the function is being asked
       # to calculate a factorial of a negative number, which is not possible
       if n < k or k < 0:
              raise ValueError("""Please enter positive integers for n and k where n >= k"""   )
       return factorial(__UpperCAmelCase   ) // (factorial(__UpperCAmelCase   ) * factorial(n - k   ))


if __name__ == "__main__":
      print(
          '''The number of five-card hands possible from a standard''',
          F'''fifty-two card deck is: {combinations(52, 5)}\n''',
      )

      print(
          '''If a class of 40 students must be arranged into groups of''',
          F'''4 for group projects, there are {combinations(40, 4)} ways''',
          '''to arrange them.\n''',
      )

      print(
          '''If 10 teams are competing in a Formula One race, there''',
          F'''are {combinations(10, 3)} ways that first, second and''',
          '''third place can be awarded.''',
      )










import random




def 		lowerCAmelCase_    (  __UpperCAmelCase:			list		,   __UpperCAmelCase:			Optional[int]      )      ->	tuple:
    UpperCamelCase__   ,UpperCamelCase__   ,UpperCamelCase__							:				List[Any]          =      [], [], []
    for element in data:
        if element < pivot:
            less.append(__UpperCAmelCase      )
        elif element > pivot:
            greater.append(__UpperCAmelCase      )
        else:
            equal.append(__UpperCAmelCase      )
    return less, equal, greater





def 		lowerCAmelCase_    (  __UpperCAmelCase:			list		,   __UpperCAmelCase:			int      )      ->	List[str]:
    # index = len(items) // 2 when trying to find the median
    #   (value of index when items is sorted)

    # invalid input
    if index >= len(__UpperCAmelCase      ) or index < 0:
        return None

    UpperCamelCase__							:				List[str]          =      items[random.randint(0		,   len(__UpperCAmelCase      ) - 1      )]
    UpperCamelCase__							:				List[Any]          =      0
    UpperCamelCase__   ,UpperCamelCase__   ,UpperCamelCase__							:				int          =      _partition(__UpperCAmelCase		,   __UpperCAmelCase      )
    UpperCamelCase__							:				Union[str, Any]          =      len(__UpperCAmelCase      )
    UpperCamelCase__							:				Dict          =      len(__UpperCAmelCase      )

    # index is the pivot
    if m <= index < m + count:
        return pivot
    # must be in smaller
    elif m > index:
        return quick_select(__UpperCAmelCase		,   __UpperCAmelCase      )
    # must be in larger
    else:
        return quick_select(__UpperCAmelCase		,   index - (m + count)      )

