
"""simple docstring"""

class    _UpperCAmelCase							:




      def __init__(							self      ,				lowercase_=None							)  ->    Union[str, Any]:
          UpperCAmelCase  	=    data
          UpperCAmelCase  	=    None




      def __repr__(							self							)  ->    Tuple:
          UpperCAmelCase  	=    ''
          UpperCAmelCase  	=    self
          while temp:
              string_rep += F"<{temp.data}> ---> "
              UpperCAmelCase  	=    temp.next
          string_rep += "<END>"
          return string_rep




def 			lowercase__  (    lowerCAmelCase :    int       )       ->					List[Any]:






    """simple docstring"""




    if not elements_list:
        raise Exception('The Elements List is empty'       )

    # Set first element as Head
    UpperCAmelCase  	=    Node(elements_list[0]       )
    UpperCAmelCase  	=    head
    # Loop through elements from position 1
    for data in elements_list[1:]:
        UpperCAmelCase  	=    Node(lowerCAmelCase       )
        UpperCAmelCase  	=    current.next
    return head


SCREAMING_SNAKE_CASE_			    =  [1, 3, 5, 32, 44, 12, 43]
print(F'List: {list_data}')
print('''Creating Linked List from List.''')
SCREAMING_SNAKE_CASE_			    =  make_linked_list(list_data)
print('''Linked List:''')







print(linked_list)





"""simple docstring"""

from __future__ import annotations




def 			lowercase__  (    lowerCAmelCase :    Dict       )       ->					Optional[int]:






    """simple docstring"""




    global graph, reversed_graph, scc, component, visit, stack
    if visit[u]:
        return
    UpperCAmelCase  	=    True
    for v in graph[u]:
        dfs(lowerCAmelCase       )
    stack.append(lowerCAmelCase       )




def 			lowercase__  (    lowerCAmelCase :    Optional[int]       )       ->					int:






    """simple docstring"""




    global graph, reversed_graph, scc, component, visit, stack
    if visit[u]:
        return
    UpperCAmelCase  	=    True
    component.append(lowerCAmelCase       )
    for v in reversed_graph[u]:
        dfsa(lowerCAmelCase       )




def 			lowercase__  (    )       ->					List[str]:






    """simple docstring"""




    global graph, reversed_graph, scc, component, visit, stack
    for i in range(lowerCAmelCase       ):
        dfs(lowerCAmelCase       )
    UpperCAmelCase  	=    [False] * n
    for i in stack[::-1]:
        if visit[i]:
            continue
        UpperCAmelCase  	=    []
        dfsa(lowerCAmelCase       )
        scc.append(lowerCAmelCase       )
    return scc


if __name__ == "__main__":
   # n - no of nodes, m - no of edges
   SCREAMING_SNAKE_CASE_    ,  SCREAMING_SNAKE_CASE_			    =  list(map(int, input().strip().split()))

   SCREAMING_SNAKE_CASE_			    =  [[] for _ in range(n)]  # graph
   SCREAMING_SNAKE_CASE_			    =  [[] for i in range(n)]  # reversed graph
   # input graph data (edges)
   for _ in range(m):
      SCREAMING_SNAKE_CASE_    ,  SCREAMING_SNAKE_CASE_			    =  list(map(int, input().strip().split()))
      graph[u].append(v)
      reversed_graph[v].append(u)

   SCREAMING_SNAKE_CASE_			    =  []
   SCREAMING_SNAKE_CASE_			    =  [False] * n
   SCREAMING_SNAKE_CASE_			    =  []
   SCREAMING_SNAKE_CASE_			    =  []
   print(kosaraju())



