






'''simple docstring'''
from __future__ import annotations

def 							a	(   _UpperCAmelCase )				->				Any:






     """simple docstring"""







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

def 							a	(   _UpperCAmelCase )				->				Any:






     """simple docstring"""







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

def 							a	(   )				->				int:






     """simple docstring"""







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


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

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

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









'''simple docstring'''
def 							a	(   _UpperCAmelCase					,  _UpperCAmelCase					,  _UpperCAmelCase )				->				list[int]:






					"""simple docstring"""







					if hue < 0 or hue > 3_6_0:
										raise Exception('hue should be between 0 and 360' )

					if saturation < 0 or saturation > 1:
										raise Exception('saturation should be between 0 and 1' )

					if value < 0 or value > 1:
										raise Exception('value should be between 0 and 1' )

					a_									=   value * saturation
					a_									=   hue / 6_0
					a_									=   chroma * (1 - abs(hue_section % 2 - 1 ))
					a_									=   value - chroma

					if hue_section >= 0 and hue_section <= 1:
										a_									=   round(2_5_5 * (chroma + match_value) )
										a_									=   round(2_5_5 * (second_largest_component + match_value) )
										a_									=   round(2_5_5 * (match_value) )
					elif hue_section > 1 and hue_section <= 2:
										a_									=   round(2_5_5 * (second_largest_component + match_value) )
										a_									=   round(2_5_5 * (chroma + match_value) )
										a_									=   round(2_5_5 * (match_value) )
					elif hue_section > 2 and hue_section <= 3:
										a_									=   round(2_5_5 * (match_value) )
										a_									=   round(2_5_5 * (chroma + match_value) )
										a_									=   round(2_5_5 * (second_largest_component + match_value) )
					elif hue_section > 3 and hue_section <= 4:
										a_									=   round(2_5_5 * (match_value) )
										a_									=   round(2_5_5 * (second_largest_component + match_value) )
										a_									=   round(2_5_5 * (chroma + match_value) )
					elif hue_section > 4 and hue_section <= 5:
										a_									=   round(2_5_5 * (second_largest_component + match_value) )
										a_									=   round(2_5_5 * (match_value) )
										a_									=   round(2_5_5 * (chroma + match_value) )
					else:
										a_									=   round(2_5_5 * (chroma + match_value) )
										a_									=   round(2_5_5 * (match_value) )
										a_									=   round(2_5_5 * (second_largest_component + match_value) )

					return [red, green, blue]

def 							a	(   _UpperCAmelCase					,  _UpperCAmelCase					,  _UpperCAmelCase )				->				list[float]:






					"""simple docstring"""







					if red < 0 or red > 2_5_5:
										raise Exception('red should be between 0 and 255' )

					if green < 0 or green > 2_5_5:
										raise Exception('green should be between 0 and 255' )

					if blue < 0 or blue > 2_5_5:
										raise Exception('blue should be between 0 and 255' )

					a_									=   red / 2_5_5
					a_									=   green / 2_5_5
					a_									=   blue / 2_5_5
					a_									=   max(_UpperCAmelCase					,  _UpperCAmelCase					,  _UpperCAmelCase )
					a_									=   value - min(_UpperCAmelCase					,  _UpperCAmelCase					,  _UpperCAmelCase )
					a_									=   0 if value == 0 else chroma / value

					if chroma == 0:
										a_									=   0.0
					elif value == float_red:
										a_									=   6_0 * (0 + (float_green - float_blue) / chroma)
					elif value == float_green:
										a_									=   6_0 * (2 + (float_blue - float_red) / chroma)
					else:
										a_									=   6_0 * (4 + (float_red - float_green) / chroma)

					a_									=   (hue + 3_6_0) % 3_6_0

					return [hue, saturation, value]





def 							a	(   _UpperCAmelCase					,  _UpperCAmelCase )				->				bool:






					"""simple docstring"""







					a_									=   abs(hsv_a[0] - hsv_a[0] ) < 0.2
					a_									=   abs(hsv_a[1] - hsv_a[1] ) < 0.0_0_2
					a_									=   abs(hsv_a[2] - hsv_a[2] ) < 0.0_0_2

					return check_hue and check_saturation and check_value

