from __future__ import annotations

import math
from collections import Counter
from string import ascii_lowercase





def 				UpperCAmelCase						(    lowercase							):







				"""simple docstring"""



				__lowercase			,     __lowercase 			=							analyze_text(lowercase							)
				__lowercase 			=							list(''' ''' + ascii_lowercase							)
				# what is our total sum of probabilities.
				__lowercase 			=							sum(single_char_strings.values()							)

				# one length string
				__lowercase 			=							0
				# for each alpha we go in our dict and if it is in it we calculate entropy
				for ch in my_alphas:
								if ch in single_char_strings:
												__lowercase 			=							single_char_strings[ch]
												__lowercase 			=							my_str / all_sum
												my_fir_sum += prob * math.loga(lowercase							)  # entropy formula.

    # print entropy
				print(F"{round(-1 * my_fir_sum							):.1f}"							)

				# two len string
				__lowercase 			=							sum(two_char_strings.values()							)
				__lowercase 			=							0
				# for each alpha (two in size) calculate entropy.
				for cha in my_alphas:
								for cha in my_alphas:
												__lowercase 			=							cha + cha
												if sequence in two_char_strings:
																__lowercase 			=							two_char_strings[sequence]
																__lowercase 			=							int(lowercase							) / all_sum
																my_sec_sum += prob * math.loga(lowercase							)

    # print second entropy
				print(F"{round(-1 * my_sec_sum							):.1f}"							)

				# print the difference between them
				print(F"{round((-1 * my_sec_sum) - (-1 * my_fir_sum)							):.1f}"							)





def 				UpperCAmelCase						(    lowercase							):







				"""simple docstring"""



				__lowercase 			=							Counter()  # type: ignore
				__lowercase 			=							Counter()  # type: ignore
				single_char_strings[text[-1]] += 1

				# first case when we have space at start.
				two_char_strings[" " + text[0]] += 1
				for i in range(0							,			len(lowercase							) - 1							):
								single_char_strings[text[i]] += 1
								two_char_strings[text[i : i + 2]] += 1
				return single_char_strings, two_char_strings





def 				UpperCAmelCase						(    ):







				"""simple docstring"""



				import doctest

				doctest.testmod()
				# text = (
				#     "Had repulsive dashwoods suspicion sincerity but advantage now him. Remark "
				#     "easily garret nor nay. Civil those mrs enjoy shy fat merry. You greatest "
				#     "jointure saw horrible. He private he on be imagine suppose. Fertile "
				#     "beloved evident through no service elderly is. Blind there if every no so "
				#     "at. Own neglected you preferred way sincerity delivered his attempted. To "
				#     "of message cottage windows do besides against uncivil.  Delightful "
				#     "unreserved impossible few estimating men favourable see entreaties. She "
				#     "propriety immediate was improving. He or entrance humoured likewise "
				#     "moderate. Much nor game son say feel. Fat make met can must form into "
				#     "gate. Me we offending prevailed discovery. "
				# )

				# calculate_prob(text)


if __name__ == "__main__":
		main()
from decimal import Decimal, getcontext
from math import ceil, factorial





def 				UpperCAmelCase						(    lowercase							):







				"""simple docstring"""



				if not isinstance(lowercase							,			lowercase							):
								raise TypeError('''Undefined for non-integers'''							)
				elif precision < 1:
								raise ValueError('''Undefined for non-natural numbers'''							)

				__lowercase 			=							precision
				__lowercase 			=							ceil(precision / 14							)
				__lowercase 			=							426880 * Decimal(10005							).sqrt()
				__lowercase 			=							1
				__lowercase 			=							13591409
				__lowercase 			=							Decimal(lowercase							)
				for k in range(1							,			lowercase							):
								__lowercase 			=							factorial(6 * k							) // (factorial(3 * k							) * factorial(lowercase							) ** 3)
								linear_term += 545140134
								exponential_term *= -262537412640768000
								partial_sum += Decimal(multinomial_term * linear_term							) / exponential_term
				return str(constant_term / partial_sum							)[:-1]


if __name__ == "__main__":
		__a  :     Optional[Any]       =  5_0
		print(F'''The first {n} digits of pi is: {pi(n)}''')