



def 		a__      (		_UpperCamelCase      :			List[Any]				):
   __lowerCamelCase    				=     [0] * len(__UpperCAmelCase				)
   __lowerCamelCase    				=     []
   __lowerCamelCase    				=     []
   __lowerCamelCase    				=     0

   for values in graph.values():
      for i in values:
         indegree[i] += 1

   for i in range(len(__UpperCAmelCase				)				):
      if indegree[i] == 0:
         queue.append(__UpperCAmelCase				)

   while queue:
      __lowerCamelCase    				=     queue.pop(0				)
      cnt += 1
      topo.append(__UpperCAmelCase				)
      for x in graph[vertex]:
         indegree[x] -= 1
         if indegree[x] == 0:
            queue.append(__UpperCAmelCase				)

   if cnt != len(__UpperCAmelCase				):
      print('''Cycle exists'''				)
   else:
      print(__UpperCAmelCase				)


# Adjacency List of Graph
a_								=       {0: [1, 2], 1: [3], 2: [3], 3: [4, 5], 4: [], 5: []}





topological_sort(graph)














"""simple docstring"""





from typing import List

from .keymap import KEYMAP, get_character



def   a    (     __UpperCAmelCase      :    str  )    ->							Optional[int]:

						def decorator(__UpperCAmelCase      :    List[str]  ):
												__magic_name__:	Union[str, Any]							=       getattr(__UpperCAmelCase      ,   """handle_key"""      ,   []  )
												handle += [key]
												setattr(__UpperCAmelCase      ,   """handle_key"""      ,   __UpperCAmelCase  )
												return func

						return decorator



def   a    (     *__UpperCAmelCase      :    List[str]  )    ->							Union[str, Any]:

						def decorator(__UpperCAmelCase      :    Tuple  ):
												__magic_name__:	Union[str, Any]							=       getattr(__UpperCAmelCase      ,   """handle_key"""      ,   []  )
												handle += keys
												setattr(__UpperCAmelCase      ,   """handle_key"""      ,   __UpperCAmelCase  )
												return func

						return decorator



class       __A		(   SCREAMING_SNAKE_CASE_			):

					def __new__(			cls  :      Optional[Any]     ,		__snake_case  :      List[str]     ,		__snake_case  :      Optional[Any]     ,		__snake_case  :      Any					)			->							List[Any]:
											__magic_name__:	str							=       super().__new__(cls     ,		__snake_case     ,		__snake_case     ,		__snake_case					)
											if not hasattr(__snake_case     ,		"""key_handler"""					):
																	setattr(__snake_case     ,		"""key_handler"""     ,		{}					)
											setattr(__snake_case     ,		"""handle_input"""     ,		KeyHandler.handle_input					)

											for value in attrs.values():
																	__magic_name__:	List[str]							=       getattr(__snake_case     ,		"""handle_key"""     ,		[]					)
																	for key in handled_keys:
																							__magic_name__:	Any							=       value
											return new_cls






					@staticmethod
					def   lowerCamelCase__   (			cls  :      List[Any]					)			->							Optional[Any]:
											__magic_name__:	List[str]							=       get_character()
											if char != KEYMAP["undefined"]:
																	__magic_name__:	Union[str, Any]							=       ord(__snake_case					)
											__magic_name__:	Dict							=       cls.key_handler.get(__snake_case					)
											if handler:
																	__magic_name__:	List[str]							=       char
																	return handler(cls					)
											else:
																	return None



def   a    (     cls      :    List[Any]  )    ->							int:
						return KeyHandler(cls.__name__      ,   cls.__bases__      ,   cls.__dict__.copy()  )



