


from math import factorial

def       lowercase_		(		_A			:    int    ,					_A			:    int    ,					_A			:    float						):

      """simple docstring"""




      if successes > trials:
            raise ValueError("successes must be lower or equal to trials"						)
      if trials < 0 or successes < 0:
            raise ValueError("the function is defined for non-negative integers"						)
      if not isinstance(__a    ,					__a						) or not isinstance(__a    ,					__a						):
            raise ValueError("the function is defined for non-negative integers"						)
      if not 0 < prob < 1:
            raise ValueError("prob has to be in range of 1 - 0"						)
      lowerCamelCase__		:				int    =  (prob**successes) * ((1 - prob) ** (trials - successes))
      # Calculate the binomial coefficient: n! / k!(n-k)!
      lowerCamelCase__		:				Dict    =  float(factorial(__a						)						)
      coefficient /= factorial(__a						) * factorial(trials - successes						)
      return probability * coefficient


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

    testmod()
    print("Probability of 2 successes out of 4 trails")
    print("with probability of 0.75 is:", end=" ")
    print(binomial_distribution(2, 4, 0.7_5))









def    __lowerCamelCase					(							__a   :str    )		->				list:






		"""simple docstring"""

		A__        =   [0] * len(__a    )

		for i in range(1    ,     len(__a    )    ):
				# use last results for better performance - dynamic programming
				A__        =   prefix_result[i - 1]
				while j > 0 and input_string[i] != input_string[j]:
						A__        =   prefix_result[j - 1]

				if input_string[i] == input_string[j]:
						j += 1
				A__        =   j

		return prefix_result







def    __lowerCamelCase					(							__a   :str    )		->				int:






		"""simple docstring"""

		return max(prefix_function(__a    )    )


if __name__ == "__main__":
					import doctest

					doctest.testmod()



