




'''simple docstring'''
from typing import Dict, List, Optional, Tuple

from ...tokenization_utils import AddedToken, PreTrainedTokenizer
from ...utils import logging


_SCREAMING_SNAKE_CASE =	logging.get_logger(__name__)
class      __UpperCAmelCase							(    lowerCAmelCase							):



					'''simple docstring'''





					_UpperCamelCase  	=		["""input_ids""", """attention_mask"""]



					def __init__(  self    :	str			,					_lowercase    :	List[Any]="[PAD]"			,					_lowercase    :	Any="[BOS]"			,					_lowercase    :	Any="[EOS]"			,					_lowercase    :	str="[MASK]"			,					_lowercase    :	str="[CLS]"			,					_lowercase    :	Optional[Any]="[SEP]"			,					_lowercase    :	List[str]=2_048			,					**_lowercase    :	int			,					)						->       None:
								A_       		=   AddedToken(_lowercase			,					lstrip=_lowercase			,					rstrip=_lowercase) if isinstance(_lowercase			,					_lowercase) else pad_token
								A_       		=   AddedToken(_lowercase			,					lstrip=_lowercase			,					rstrip=_lowercase) if isinstance(_lowercase			,					_lowercase) else bos_token
								A_       		=   AddedToken(_lowercase			,					lstrip=_lowercase			,					rstrip=_lowercase) if isinstance(_lowercase			,					_lowercase) else eos_token
								A_       		=   AddedToken(_lowercase			,					lstrip=_lowercase			,					rstrip=_lowercase) if isinstance(_lowercase			,					_lowercase) else mask_token
								A_       		=   AddedToken(_lowercase			,					lstrip=_lowercase			,					rstrip=_lowercase) if isinstance(_lowercase			,					_lowercase) else cls_token
								A_       		=   AddedToken(_lowercase			,					lstrip=_lowercase			,					rstrip=_lowercase) if isinstance(_lowercase			,					_lowercase) else sep_token

								super().__init__(
								    pad_token=_lowercase			,					bos_token=_lowercase			,					eos_token=_lowercase			,					mask_token=_lowercase			,					cls_token=_lowercase			,					sep_token=_lowercase			,					model_max_length=_lowercase			,					**_lowercase			,					)

								A_       		=   2**8  # utf is 8 bits

								# define special tokens dict
								A_       		=   {
								    self.pad_token: 0,
								    self.bos_token: 1,
								    self.eos_token: 2,
								    self.mask_token: 3,
								    self.cls_token: 4,
								    self.sep_token: 5,
								}
								A_       		=   len(self.special_tokens_encoder)
								A_       		=   {v: k for k, v in self.special_tokens_encoder.items()}



					def 						__snake_case	(  self    :	List[str])						->       Dict[str, int]:
								A_       		=   self.special_tokens_encoder.copy()
								vocab.update(self.added_tokens_encoder)
								for i in range(self._utf_vocab_size):
											A_       		=   chr(_lowercase)
											A_       		=   i + len(self.special_tokens_encoder)
								return vocab



					@property
					def 						__snake_case	(  self    :	int)						->       Dict:
								return self._utf_vocab_size + self._num_special_tokens



					def 						__snake_case	(  self    :	Union[str, Any]			,					_lowercase    :	List[int]			,					_lowercase    :	Optional[List[int]] = None			,					_lowercase    :	bool = False)						->       List[int]:
								if already_has_special_tokens:
											return super().get_special_tokens_mask(
											    token_ids_a=_lowercase			,					token_ids_a=_lowercase			,					already_has_special_tokens=_lowercase)

								# normal case: some special tokens
								if token_ids_a is None:
											return [1] + [0] * len(_lowercase) + [1]
								return [1] + ([0] * len(_lowercase)) + [1] + ([0] * len(_lowercase)) + [1]



					def 						__snake_case	(  self    :	int			,					_lowercase    :	List[int]			,					_lowercase    :	Optional[List[int]] = None)						->       List[int]:
								if token_ids_a is None:
											return [self.cls_token_id] + token_ids_a + [self.sep_token_id]
								else:
											return [self.cls_token_id] + token_ids_a + [self.sep_token_id] + token_ids_a + [self.sep_token_id]



					def 						__snake_case	(  self    :	str			,					_lowercase    :	str)						->       List[str]:
								A_       		=   [chr(_lowercase) for i in text.encode('utf-8')]
								return tokens



					def 						__snake_case	(  self    :	Union[str, Any]			,					_lowercase    :	Optional[Any])						->       Tuple:
								if token in self.special_tokens_encoder:
											A_       		=   self.special_tokens_encoder[token]
								elif token in self.added_tokens_encoder:
											A_       		=   self.added_tokens_encoder[token]
								elif len(_lowercase) != 1:
											A_       		=   self.unk_token_id
								else:
											A_       		=   ord(_lowercase) + self._num_special_tokens
								return token_id



					def 						__snake_case	(  self    :	str			,					_lowercase    :	List[str])						->       Dict:
								if index in self.special_tokens_decoder:
											A_       		=   self.special_tokens_decoder[index]
								elif index in self.added_tokens_decoder:
											A_       		=   self.added_tokens_decoder[index]
								else:
											A_       		=   chr(index - self._num_special_tokens)
								return token



					def 						__snake_case	(  self    :	str			,					_lowercase    :	Dict)						->       int:
								A_       		=   B''
								for token in tokens:
											if token in self.special_tokens_decoder:
														A_       		=   self.special_tokens_decoder[token].encode('utf-8')
											elif token in self.added_tokens_decoder:
														A_       		=   self.special_tokens_decoder[token].encode('utf-8')
											elif token in self.special_tokens_encoder:
														A_       		=   token.encode('utf-8')
											elif token in self.added_tokens_encoder:
														A_       		=   token.encode('utf-8')
											else:
														A_       		=   bytes([ord(_lowercase)])
											bstring += tok_string
								A_       		=   bstring.decode('utf-8'			,					errors='replace')
								return string



					def 						__snake_case	(  self    :	Optional[int]			,					_lowercase    :	str			,					_lowercase    :	Optional[str] = None)						->       Tuple[str]:
								return ()










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





def  lowerCamelCase(       SCREAMING_SNAKE_CASE_    )		->		Optional[int]:
			global graph, reversed_graph, scc, component, visit, stack
			if visit[u]:
						return
			A_       		=   True
			for v in graph[u]:
						dfs(SCREAMING_SNAKE_CASE_    )
			stack.append(SCREAMING_SNAKE_CASE_    )





def  lowerCamelCase(       SCREAMING_SNAKE_CASE_    )		->		List[Any]:
			global graph, reversed_graph, scc, component, visit, stack
			if visit[u]:
						return
			A_       		=   True
			component.append(SCREAMING_SNAKE_CASE_    )
			for v in reversed_graph[u]:
						dfsa(SCREAMING_SNAKE_CASE_    )





def  lowerCamelCase(       )		->		int:
			global graph, reversed_graph, scc, component, visit, stack
			for i in range(SCREAMING_SNAKE_CASE_    ):
						dfs(SCREAMING_SNAKE_CASE_    )
			A_       		=   [False] * n
			for i in stack[::-1]:
						if visit[i]:
									continue
						A_       		=   []
						dfsa(SCREAMING_SNAKE_CASE_    )
						scc.append(SCREAMING_SNAKE_CASE_    )
			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())




