





from __future__ import annotations





def 		__SCREAMING_SNAKE_CASE						(       UpperCamelCase__				)						->       Tuple:







			'''simple docstring'''

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





def 		__SCREAMING_SNAKE_CASE						(       UpperCamelCase__				)						->       List[Any]:







			'''simple docstring'''

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





def 		__SCREAMING_SNAKE_CASE						(       )						->       str:







			'''simple docstring'''

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


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

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

				__A       :					list[int]     					=     []
				__A       :					list[bool]     					=     [False] * n
				__A       :					list[int]     					=     []
				__A       :					list[int]     					=     []
				print(kosaraju())










import argparse

from tax import checkpoints

from transformers import FlaxTaForConditionalGeneration, TaConfig





def 		__SCREAMING_SNAKE_CASE						(       UpperCamelCase__    ,    UpperCamelCase__    ,    UpperCamelCase__				)						->       Union[str, Any]:







			'''simple docstring'''

			UpperCAmelCase     	=       TaConfig.from_pretrained(UpperCamelCase__				)
			UpperCAmelCase     	=       FlaxTaForConditionalGeneration(config=UpperCamelCase__				)
			UpperCAmelCase     	=       checkpoints.load_tax_checkpoint(UpperCamelCase__				)

			UpperCAmelCase     	=       '''wi_0''' in tax_model['''target''']['''encoder''']['''layers_0''']['''mlp''']

			# Encoder
			for layer_index in range(config.num_layers				):
						UpperCAmelCase     	=       F"""layers_{str(UpperCamelCase__				)}"""

						# Self-Attention
						UpperCAmelCase     	=       tax_model['''target''']['''encoder'''][layer_name]['''attention''']['''key''']['''kernel''']
						UpperCAmelCase     	=       tax_model['''target''']['''encoder'''][layer_name]['''attention''']['''out''']['''kernel''']
						UpperCAmelCase     	=       tax_model['''target''']['''encoder'''][layer_name]['''attention''']['''query''']['''kernel''']
						UpperCAmelCase     	=       tax_model['''target''']['''encoder'''][layer_name]['''attention''']['''value''']['''kernel''']

						# Layer Normalization
						UpperCAmelCase     	=       tax_model['''target''']['''encoder'''][layer_name]['''pre_attention_layer_norm''']['''scale''']

						if split_mlp_wi:
									UpperCAmelCase     	=       tax_model['''target''']['''encoder'''][layer_name]['''mlp''']['''wi_0''']['''kernel''']
									UpperCAmelCase     	=       tax_model['''target''']['''encoder'''][layer_name]['''mlp''']['''wi_1''']['''kernel''']
						else:
									UpperCAmelCase     	=       tax_model['''target''']['''encoder'''][layer_name]['''mlp''']['''wi''']['''kernel''']

						UpperCAmelCase     	=       tax_model['''target''']['''encoder'''][layer_name]['''mlp''']['''wo''']['''kernel''']

						# Layer Normalization
						UpperCAmelCase     	=       tax_model['''target''']['''encoder'''][layer_name]['''pre_mlp_layer_norm''']['''scale''']

						# Assigning
						UpperCAmelCase     	=       tax_attention_key
						UpperCAmelCase     	=       tax_attention_out
						UpperCAmelCase     	=       tax_attention_query
						UpperCAmelCase     	=       tax_attention_value

						UpperCAmelCase     	=       tax_attention_layer_norm

						if split_mlp_wi:
									UpperCAmelCase     	=       tax_mlp_wi_a
									UpperCAmelCase     	=       tax_mlp_wi_a
						else:
									UpperCAmelCase     	=       tax_mlp_wi

						UpperCAmelCase     	=       tax_mlp_wo
						UpperCAmelCase     	=       tax_mlp_layer_norm

			# Only for layer 0:
			UpperCAmelCase     	=       tax_model['''target''']['''encoder''']['''relpos_bias''']['''rel_embedding'''].T
			UpperCAmelCase     	=       tax_encoder_rel_embedding

			# Assigning
			UpperCAmelCase     	=       tax_model['''target''']['''encoder''']['''encoder_norm''']['''scale''']
			UpperCAmelCase     	=       tax_encoder_norm

			# Decoder
			for layer_index in range(config.num_decoder_layers				):
						UpperCAmelCase     	=       F"""layers_{str(UpperCamelCase__				)}"""

						# Self-Attention
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''self_attention''']['''key''']['''kernel''']
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''self_attention''']['''out''']['''kernel''']
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''self_attention''']['''query''']['''kernel''']
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''self_attention''']['''value''']['''kernel''']

						# Layer Normalization
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''pre_self_attention_layer_norm'''][
						    '''scale'''
						]

						# Encoder-Decoder-Attention
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''encoder_decoder_attention''']['''key'''][
						    '''kernel'''
						]
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''encoder_decoder_attention''']['''out'''][
						    '''kernel'''
						]
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''encoder_decoder_attention''']['''query'''][
						    '''kernel'''
						]
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''encoder_decoder_attention''']['''value'''][
						    '''kernel'''
						]

						# Layer Normalization
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''pre_cross_attention_layer_norm''']['''scale''']

						# MLP
						if split_mlp_wi:
									UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''mlp''']['''wi_0''']['''kernel''']
									UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''mlp''']['''wi_1''']['''kernel''']
						else:
									UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''mlp''']['''wi''']['''kernel''']

						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''mlp''']['''wo''']['''kernel''']

						# Layer Normalization
						UpperCAmelCase     	=       tax_model['''target''']['''decoder'''][layer_name]['''pre_mlp_layer_norm''']['''scale''']

						# Assigning
						UpperCAmelCase     	=       tax_attention_key
						UpperCAmelCase     	=       tax_attention_out
						UpperCAmelCase     	=       tax_attention_query
						UpperCAmelCase     	=       tax_attention_value

						UpperCAmelCase     	=       tax_pre_attention_layer_norm

						UpperCAmelCase     	=       tax_enc_dec_attention_key
						UpperCAmelCase     	=       tax_enc_dec_attention_out
						UpperCAmelCase     	=       tax_enc_dec_attention_query
						UpperCAmelCase     	=       tax_enc_dec_attention_value

						UpperCAmelCase     	=       tax_cross_layer_norm

						if split_mlp_wi:
									UpperCAmelCase     	=       tax_mlp_wi_a
									UpperCAmelCase     	=       tax_mlp_wi_a
						else:
									UpperCAmelCase     	=       tax_mlp_wi

						UpperCAmelCase     	=       tax_mlp_wo

						UpperCAmelCase     	=       txa_mlp_layer_norm

			# Decoder Normalization
			UpperCAmelCase     	=       tax_model['''target''']['''decoder''']['''decoder_norm''']['''scale''']
			UpperCAmelCase     	=       txa_decoder_norm

			# Only for layer 0:
			UpperCAmelCase     	=       tax_model['''target''']['''decoder''']['''relpos_bias''']['''rel_embedding'''].T
			UpperCAmelCase     	=       tax_decoder_rel_embedding

			# Token Embeddings
			UpperCAmelCase     	=       tax_model['''target''']['''token_embedder''']['''embedding''']
			UpperCAmelCase     	=       txa_token_embeddings

			# LM Head (only in v1.1 checkpoints)
			if "logits_dense" in tax_model["target"]["decoder"]:
						UpperCAmelCase     	=       tax_model['''target''']['''decoder''']['''logits_dense''']['''kernel''']

			flax_model.save_pretrained(UpperCamelCase__				)
			print('''T5X Model was sucessfully converted!'''				)


if __name__ == "__main__":
				__A       :					Union[str, Any]     					=     argparse.ArgumentParser()
				# Required parameters
				parser.add_argument(
				    "--t5x_checkpoint_path", default=None, type=str, required=True, help="Path the TX5 checkpoint."
				)
				parser.add_argument("--config_name", default=None, type=str, required=True, help="Config name of T5 model.")
				parser.add_argument(
				    "--flax_dump_folder_path", default=None, type=str, required=True, help="Path to the output FLAX model."
				)
				__A       :					Any     					=     parser.parse_args()
				convert_tax_checkpoint_to_flax(args.tax_checkpoint_path, args.config_name, args.flax_dump_folder_path)



