




'''simple docstring'''





UpperCamelCase_						:      List[Any]       =						{0: [2, 3], 1: [0], 2: [1], 3: [4], 4: []}

UpperCamelCase_						:      Optional[Any]       =						{0: [1, 2, 3], 1: [2], 2: [0], 3: [4], 4: [5], 5: [3]}





def      __a     (       _UpperCamelCase:   dict[int, list[int]] ,						_UpperCamelCase:   int ,						_UpperCamelCase:   list[bool]   )						->			list[int]:

     """simple docstring"""




     _snake_case							=				True
     _snake_case							=				[]

     for neighbour in graph[vert]:
          if not visited[neighbour]:
               order += topology_sort(_UpperCamelCase ,						_UpperCamelCase ,						_UpperCamelCase   )

     order.append(_UpperCamelCase   )

     return order





def      __a     (       _UpperCamelCase:   dict[int, list[int]] ,						_UpperCamelCase:   int ,						_UpperCamelCase:   list[bool]   )						->			list[int]:

     """simple docstring"""




     _snake_case							=				True
     _snake_case							=				[vert]

     for neighbour in reversed_graph[vert]:
          if not visited[neighbour]:
               component += find_components(_UpperCamelCase ,						_UpperCamelCase ,						_UpperCamelCase   )

     return component





def      __a     (       _UpperCamelCase:   dict[int, list[int]]   )						->			list[list[int]]:

     """simple docstring"""




     _snake_case							=				len(_UpperCamelCase   ) * [False]
     _snake_case							=				{vert: [] for vert in range(len(_UpperCamelCase   )   )}

     for vert, neighbours in graph.items():
          for neighbour in neighbours:
               reversed_graph[neighbour].append(_UpperCamelCase   )

     _snake_case							=				[]
     for i, was_visited in enumerate(_UpperCamelCase   ):
          if not was_visited:
               order += topology_sort(_UpperCamelCase ,						_UpperCamelCase ,						_UpperCamelCase   )

     _snake_case							=				[]
     _snake_case							=				len(_UpperCamelCase   ) * [False]

     for i in range(len(_UpperCamelCase   )   ):
          _snake_case							=				order[len(_UpperCamelCase   ) - i - 1]
          if not visited[vert]:
               _snake_case							=				find_components(_UpperCamelCase ,						_UpperCamelCase ,						_UpperCamelCase   )
               components_list.append(_UpperCamelCase   )

     return components_list








'''simple docstring'''





from decimal import Decimal, getcontext
from math import ceil, factorial





def      __a     (       _UpperCamelCase:   int   )						->			str:

     """simple docstring"""




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

     _snake_case							=				precision
     _snake_case							=				ceil(precision / 14   )
     _snake_case							=				426_880 * Decimal(10_005   ).sqrt()
     _snake_case							=				1
     _snake_case							=				13_591_409
     _snake_case							=				Decimal(_UpperCamelCase   )
     for k in range(1 ,						_UpperCamelCase   ):
          _snake_case							=				factorial(6 * k   ) // (factorial(3 * k   ) * factorial(_UpperCamelCase   ) ** 3)
          linear_term += 545_140_134
          exponential_term *= -262_537_412_640_768_000
          partial_sum += Decimal(multinomial_term * linear_term   ) / exponential_term
     return str(constant_term / partial_sum   )[:-1]


if __name__ == "__main__":
   UpperCamelCase_						:      Any       =						50
   print(F'The first {n} digits of pi is: {pi(n)}')


