



'''simple docstring'''





import os
import sys
from contextlib import contextmanager


# Windows only
if os.name == "nt":
   import ctypes
   import msvcrt  # noqa






   class 					lowerCamelCase_    (				ctypes.Structure     ):
     """simple docstring"""




     a_												=[("size", ctypes.c_int), ("visible", ctypes.c_byte)]

def        a_     (							)      ->      List[str]:
  if os.name == "nt":
    __lowerCamelCase       :       Optional[int]           = CursorInfo()
    __lowerCamelCase       :       Dict           = ctypes.windll.kernelaa.GetStdHandle(-11       )
    ctypes.windll.kernelaa.GetConsoleCursorInfo(_lowerCamelCase       ,ctypes.byref(_lowerCamelCase       )       )
    __lowerCamelCase       :       str           = False
    ctypes.windll.kernelaa.SetConsoleCursorInfo(_lowerCamelCase       ,ctypes.byref(_lowerCamelCase       )       )
  elif os.name == "posix":
    sys.stdout.write('\033[?25l'       )
    sys.stdout.flush()

def        a_     (							)      ->      List[str]:
  if os.name == "nt":
    __lowerCamelCase       :       Tuple           = CursorInfo()
    __lowerCamelCase       :       Any           = ctypes.windll.kernelaa.GetStdHandle(-11       )
    ctypes.windll.kernelaa.GetConsoleCursorInfo(_lowerCamelCase       ,ctypes.byref(_lowerCamelCase       )       )
    __lowerCamelCase       :       Dict           = True
    ctypes.windll.kernelaa.SetConsoleCursorInfo(_lowerCamelCase       ,ctypes.byref(_lowerCamelCase       )       )
  elif os.name == "posix":
    sys.stdout.write('\033[?25h'       )
    sys.stdout.flush()


@contextmanager
def        a_     (							)      ->      List[Any]:
  try:
    hide_cursor()
    yield
  finally:
    show_cursor()







"""simple docstring"""




def 							SCREAMING_SNAKE_CASE     (			_lowerCamelCase						:       Any	)       ->      List[Any]:  # noqa: E741
  _lowerCAmelCase						:       Optional[int]  			=     len(_lowerCamelCase	)
  _lowerCAmelCase						:       str  			=     0
  _lowerCAmelCase						:       Any  			=     [0] * n
  _lowerCAmelCase						:       str  			=     [False] * n
  _lowerCAmelCase						:       str  			=     [False] * n

  def dfs(_lowerCamelCase						:       Tuple			,_lowerCamelCase						:       Union[str, Any]			,_lowerCamelCase						:       Union[str, Any]			,_lowerCamelCase						:       str	):
    if parent == root:
      out_edge_count += 1
    _lowerCAmelCase						:       Any  			=     True
    _lowerCAmelCase						:       int  			=     at

    for to in l[at]:
      if to == parent:
        pass
      elif not visited[to]:
        _lowerCAmelCase						:       Union[str, Any]  			=     dfs(_lowerCamelCase			,_lowerCamelCase			,_lowerCamelCase			,_lowerCamelCase	)
        _lowerCAmelCase						:       Optional[int]  			=     min(low[at]			,low[to]	)

        # AP found via bridge
        if at < low[to]:
          _lowerCAmelCase						:       int  			=     True
        # AP found via cycle
        if at == low[to]:
          _lowerCAmelCase						:       Tuple  			=     True
      else:
        _lowerCAmelCase						:       Union[str, Any]  			=     min(low[at]			,_lowerCamelCase	)
    return out_edge_count

  for i in range(_lowerCamelCase	):
    if not visited[i]:
      _lowerCAmelCase						:       int  			=     0
      _lowerCAmelCase						:       Dict  			=     dfs(_lowerCamelCase			,_lowerCamelCase			,-1			,_lowerCamelCase	)
      _lowerCAmelCase						:       List[str]  			=     out_edge_count > 1

  for x in range(len(_lowerCamelCase	)	):
    if is_art[x] is True:
      print(_lowerCamelCase	)


# Adjacency list of graph
_a      :		Optional[Any]           =   {
    0: [1, 2],
    1: [0, 2],
    2: [0, 1, 3, 5],
    3: [2, 4],
    4: [3],
    5: [2, 6, 8],
    6: [5, 7],
    7: [6, 8],
    8: [5, 7],
}






compute_ap(data)




