






def   snake_case (UpperCAmelCase__     ,   UpperCAmelCase__ = False  )	->    str:

  if not isinstance(UpperCAmelCase__     ,   UpperCAmelCase__  ):
    UpperCamelCase_: Optional[int]   				=    F'''Expected string as input, found {type(UpperCAmelCase__  )}'''
    raise ValueError(UpperCAmelCase__  )
  if not isinstance(UpperCAmelCase__     ,   UpperCAmelCase__  ):
    UpperCamelCase_: Tuple   				=    F'''Expected boolean as use_pascal parameter, found {type(UpperCAmelCase__  )}'''
    raise ValueError(UpperCAmelCase__  )

  UpperCamelCase_: List[str]   				=    input_str.split('_'  )

  UpperCamelCase_: Optional[Any]   				=    0 if use_pascal else 1

  UpperCamelCase_: str   				=    words[start_index:]

  UpperCamelCase_: Union[str, Any]   				=    [word[0].upper() + word[1:] for word in words_to_capitalize]

  UpperCamelCase_: str   				=    '' if use_pascal else words[0]

  return "".join([initial_word, *capitalized_words]  )


if __name__ == "__main__":
   from doctest import testmod

   testmod()







def   snake_case (UpperCAmelCase__     ,   UpperCAmelCase__  )	->    int:
  while b:
    UpperCamelCase_				,UpperCamelCase_: int   				=    b, a % b
  return a

def   snake_case (UpperCAmelCase__     ,   UpperCAmelCase__  )	->    int:
  return a if b == 0 else euclidean_gcd_recursive(UpperCAmelCase__     ,   a % b  )

def   snake_case ()	->    int:
  print(F'''euclidean_gcd(3, 5) = {euclidean_gcd(3     ,   5  )}'''  )
  print(F'''euclidean_gcd(5, 3) = {euclidean_gcd(5     ,   3  )}'''  )
  print(F'''euclidean_gcd(1, 3) = {euclidean_gcd(1     ,   3  )}'''  )
  print(F'''euclidean_gcd(3, 6) = {euclidean_gcd(3     ,   6  )}'''  )
  print(F'''euclidean_gcd(6, 3) = {euclidean_gcd(6     ,   3  )}'''  )

  print(F'''euclidean_gcd_recursive(3, 5) = {euclidean_gcd_recursive(3     ,   5  )}'''  )
  print(F'''euclidean_gcd_recursive(5, 3) = {euclidean_gcd_recursive(5     ,   3  )}'''  )
  print(F'''euclidean_gcd_recursive(1, 3) = {euclidean_gcd_recursive(1     ,   3  )}'''  )
  print(F'''euclidean_gcd_recursive(3, 6) = {euclidean_gcd_recursive(3     ,   6  )}'''  )
  print(F'''euclidean_gcd_recursive(6, 3) = {euclidean_gcd_recursive(6     ,   3  )}'''  )


if __name__ == "__main__":
   main()