
"""simple docstring"""


import json
import os
import unittest

from transformers.models.roc_bert.tokenization_roc_bert import (
    VOCAB_FILES_NAMES,
    RoCBertBasicTokenizer,
    RoCBertTokenizer,
    RoCBertWordpieceTokenizer,
    _is_control,
    _is_punctuation,
    _is_whitespace,
)
from transformers.testing_utils import require_tokenizers, slow

from ...test_tokenization_common import TokenizerTesterMixin, filter_non_english







@require_tokenizers
class 				lowerCAmelCase_				(      _UpperCamelCase		,					unittest.TestCase    ):



						'''simple docstring'''


						_lowerCamelCase:    Union[str, Any]      =    RoCBertTokenizer
						_lowerCamelCase:    Dict      =    None
						_lowerCamelCase:    List[Any]      =    False
						_lowerCamelCase:    Union[str, Any]      =    True
						_lowerCamelCase:    Union[str, Any]      =    filter_non_english


						def 						_SCREAMING_SNAKE_CASE      ( self     :      str      )     ->   Dict:
							super().setUp()

							A						   =   ["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]", "你", "好", "是", "谁", "a", "b", "c", "d"]
							A						   =   {}
							A						   =   {}
							for i, value in enumerate(__a      ):
								A						   =   i
								A						   =   i
							A						   =   os.path.join(self.tmpdirname  ,VOCAB_FILES_NAMES['vocab_file']      )
							A						   =   os.path.join(self.tmpdirname  ,VOCAB_FILES_NAMES['word_shape_file']      )
							A						   =   os.path.join(self.tmpdirname  ,VOCAB_FILES_NAMES['word_pronunciation_file']      )
							with open(self.vocab_file  ,'w'  ,encoding='utf-8'      ) as vocab_writer:
								vocab_writer.write(''.join([x + '\n' for x in vocab_tokens]      )      )
							with open(self.word_shape_file  ,'w'  ,encoding='utf-8'      ) as word_shape_writer:
								json.dump(__a  ,__a  ,ensure_ascii=__a      )
							with open(self.word_pronunciation_file  ,'w'  ,encoding='utf-8'      ) as word_pronunciation_writer:
								json.dump(__a  ,__a  ,ensure_ascii=__a      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      int      )     ->   Optional[int]:
							A						   =   self.tokenizer_class(self.vocab_file  ,self.word_shape_file  ,self.word_pronunciation_file      )

							A						   =   tokenizer.tokenize('你好[SEP]你是谁'      )
							self.assertListEqual(__a  ,['你', '好', '[SEP]', '你', '是', '谁']      )
							self.assertListEqual(tokenizer.convert_tokens_to_ids(__a      )  ,[5, 6, 2, 5, 7, 8]      )
							self.assertListEqual(tokenizer.convert_tokens_to_shape_ids(__a      )  ,[5, 6, 2, 5, 7, 8]      )
							self.assertListEqual(tokenizer.convert_tokens_to_pronunciation_ids(__a      )  ,[5, 6, 2, 5, 7, 8]      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Dict      )     ->   Dict:
							A						   =   RoCBertBasicTokenizer()

							self.assertListEqual(tokenizer.tokenize('ah\u535A\u63A8zz'      )  ,['ah', '\u535A', '\u63A8', 'zz']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      List[str]      )     ->   Any:
							A						   =   RoCBertBasicTokenizer(do_lower_case=__a      )

							self.assertListEqual(
							    tokenizer.tokenize(' \tHeLLo!how  \n Are yoU?  '      )  ,['hello', '!', 'how', 'are', 'you', '?']      )
							self.assertListEqual(tokenizer.tokenize('H\u00E9llo'      )  ,['hello']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[Any]      )     ->   Tuple:
							A						   =   RoCBertBasicTokenizer(do_lower_case=__a  ,strip_accents=__a      )

							self.assertListEqual(
							    tokenizer.tokenize(' \tHäLLo!how  \n Are yoU?  '      )  ,['hällo', '!', 'how', 'are', 'you', '?']      )
							self.assertListEqual(tokenizer.tokenize('H\u00E9llo'      )  ,['h\u00E9llo']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Dict      )     ->   str:
							A						   =   RoCBertBasicTokenizer(do_lower_case=__a  ,strip_accents=__a      )

							self.assertListEqual(
							    tokenizer.tokenize(' \tHäLLo!how  \n Are yoU?  '      )  ,['hallo', '!', 'how', 'are', 'you', '?']      )
							self.assertListEqual(tokenizer.tokenize('H\u00E9llo'      )  ,['hello']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Union[str, Any]      )     ->   Union[str, Any]:
							A						   =   RoCBertBasicTokenizer(do_lower_case=__a      )

							self.assertListEqual(
							    tokenizer.tokenize(' \tHäLLo!how  \n Are yoU?  '      )  ,['hallo', '!', 'how', 'are', 'you', '?']      )
							self.assertListEqual(tokenizer.tokenize('H\u00E9llo'      )  ,['hello']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      str      )     ->   Optional[int]:
							A						   =   RoCBertBasicTokenizer(do_lower_case=__a      )

							self.assertListEqual(
							    tokenizer.tokenize(' \tHeLLo!how  \n Are yoU?  '      )  ,['HeLLo', '!', 'how', 'Are', 'yoU', '?']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      List[str]      )     ->   List[str]:
							A						   =   RoCBertBasicTokenizer(do_lower_case=__a  ,strip_accents=__a      )

							self.assertListEqual(
							    tokenizer.tokenize(' \tHäLLo!how  \n Are yoU?  '      )  ,['HäLLo', '!', 'how', 'Are', 'yoU', '?']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Tuple      )     ->   List[Any]:
							A						   =   RoCBertBasicTokenizer(do_lower_case=__a  ,strip_accents=__a      )

							self.assertListEqual(
							    tokenizer.tokenize(' \tHäLLo!how  \n Are yoU?  '      )  ,['HaLLo', '!', 'how', 'Are', 'yoU', '?']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[Any]      )     ->   int:
							A						   =   RoCBertBasicTokenizer(do_lower_case=__a  ,never_split=['[UNK]']      )

							self.assertListEqual(
							    tokenizer.tokenize(' \tHeLLo!how  \n Are yoU? [UNK]'      )  ,['HeLLo', '!', 'how', 'Are', 'yoU', '?', '[UNK]']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      List[str]      )     ->   Optional[Any]:
							A						   =   ["[UNK]", "[CLS]", "[SEP]", "want", "##want", "##ed", "wa", "un", "runn", "##ing"]

							A						   =   {}
							for i, token in enumerate(__a      ):
								A						   =   i
							A						   =   RoCBertWordpieceTokenizer(vocab=__a  ,unk_token='[UNK]'      )

							self.assertListEqual(tokenizer.tokenize(''      )  ,[]      )

							self.assertListEqual(tokenizer.tokenize('unwanted running'      )  ,['un', '##want', '##ed', 'runn', '##ing']      )

							self.assertListEqual(tokenizer.tokenize('unwantedX running'      )  ,['[UNK]', 'runn', '##ing']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Dict      )     ->   Optional[Any]:
							self.assertTrue(_is_whitespace(' '      )      )
							self.assertTrue(_is_whitespace('\t'      )      )
							self.assertTrue(_is_whitespace('\r'      )      )
							self.assertTrue(_is_whitespace('\n'      )      )
							self.assertTrue(_is_whitespace('\u00A0'      )      )

							self.assertFalse(_is_whitespace('A'      )      )
							self.assertFalse(_is_whitespace('-'      )      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Any      )     ->   Dict:
							self.assertTrue(_is_control('\u0005'      )      )

							self.assertFalse(_is_control('A'      )      )
							self.assertFalse(_is_control(' '      )      )
							self.assertFalse(_is_control('\t'      )      )
							self.assertFalse(_is_control('\r'      )      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[int]      )     ->   Optional[int]:
							self.assertTrue(_is_punctuation('-'      )      )
							self.assertTrue(_is_punctuation('$'      )      )
							self.assertTrue(_is_punctuation('`'      )      )
							self.assertTrue(_is_punctuation('.'      )      )

							self.assertFalse(_is_punctuation('A'      )      )
							self.assertFalse(_is_punctuation(' '      )      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      int      )     ->   List[Any]:
							A						   =   self.get_tokenizer()

							# Example taken from the issue https://github.com/huggingface/tokenizers/issues/340
							self.assertListEqual([tokenizer.tokenize(__a      ) for t in ['Test', '\xad', 'test']]  ,[['[UNK]'], [], ['[UNK]']]      )

							if self.test_rust_tokenizer:
								A						   =   self.get_rust_tokenizer()
								self.assertListEqual(
								    [rust_tokenizer.tokenize(__a      ) for t in ['Test', '\xad', 'test']]  ,[['[UNK]'], [], ['[UNK]']]      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Tuple      )     ->   Optional[Any]:
							for tokenizer, pretrained_name, kwargs in self.tokenizers_list:
								with self.subTest(F'{tokenizer.__class__.__name__} ({pretrained_name})'      ):
									A						   =   self.rust_tokenizer_class.from_pretrained(__a  ,**__a      )

									A						   =   F'A, naïve {tokenizer_r.mask_token} AllenNLP sentence.'
									A						   =   tokenizer_r.encode_plus(
									    __a  ,return_attention_mask=__a  ,return_token_type_ids=__a  ,return_offsets_mapping=__a  ,add_special_tokens=__a  ,)

									A						   =   tokenizer_r.do_lower_case if hasattr(__a  ,'do_lower_case'      ) else False
									A						   =   (
									    [
									        ((0, 0), tokenizer_r.cls_token),
									        ((0, 1), "A"),
									        ((1, 2), ","),
									        ((3, 5), "na"),
									        ((5, 6), "##ï"),
									        ((6, 8), "##ve"),
									        ((9, 15), tokenizer_r.mask_token),
									        ((16, 21), "Allen"),
									        ((21, 23), "##NL"),
									        ((23, 24), "##P"),
									        ((25, 33), "sentence"),
									        ((33, 34), "."),
									        ((0, 0), tokenizer_r.sep_token),
									    ]
									    if not do_lower_case
									    else [
									        ((0, 0), tokenizer_r.cls_token),
									        ((0, 1), "a"),
									        ((1, 2), ","),
									        ((3, 8), "naive"),
									        ((9, 15), tokenizer_r.mask_token),
									        ((16, 21), "allen"),
									        ((21, 23), "##nl"),
									        ((23, 24), "##p"),
									        ((25, 33), "sentence"),
									        ((33, 34), "."),
									        ((0, 0), tokenizer_r.sep_token),
									    ]
									)

									self.assertEqual(
									    [e[1] for e in expected_results]  ,tokenizer_r.convert_ids_to_tokens(tokens['input_ids']      )      )
									self.assertEqual([e[0] for e in expected_results]  ,tokens['offset_mapping']      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      int      )     ->   List[Any]:
							A						   =   ["的", "人", "有"]
							A						   =   "".join(__a      )
							for tokenizer, pretrained_name, kwargs in self.tokenizers_list:
								with self.subTest(F'{tokenizer.__class__.__name__} ({pretrained_name})'      ):
									A						   =   True
									A						   =   self.tokenizer_class.from_pretrained(__a  ,**__a      )
									A						   =   self.rust_tokenizer_class.from_pretrained(__a  ,**__a      )

									A						   =   tokenizer_p.encode(__a  ,add_special_tokens=__a      )
									A						   =   tokenizer_r.encode(__a  ,add_special_tokens=__a      )

									A						   =   tokenizer_r.convert_ids_to_tokens(__a      )
									A						   =   tokenizer_p.convert_ids_to_tokens(__a      )

									# it is expected that each Chinese character is not preceded by "##"
									self.assertListEqual(__a  ,__a      )
									self.assertListEqual(__a  ,__a      )

									A						   =   False
									A						   =   self.rust_tokenizer_class.from_pretrained(__a  ,**__a      )
									A						   =   self.tokenizer_class.from_pretrained(__a  ,**__a      )

									A						   =   tokenizer_r.encode(__a  ,add_special_tokens=__a      )
									A						   =   tokenizer_p.encode(__a  ,add_special_tokens=__a      )

									A						   =   tokenizer_r.convert_ids_to_tokens(__a      )
									A						   =   tokenizer_p.convert_ids_to_tokens(__a      )

									# it is expected that only the first Chinese character is not preceded by "##".
									A						   =   [
									    F'##{token}' if idx != 0 else token for idx, token in enumerate(__a      )
									]
									self.assertListEqual(__a  ,__a      )
									self.assertListEqual(__a  ,__a      )


						@slow
						def 						_SCREAMING_SNAKE_CASE      ( self     :      Union[str, Any]      )     ->   Any:
							A						   =   self.tokenizer_class(self.vocab_file  ,self.word_shape_file  ,self.word_pronunciation_file      )

							A						   =   tokenizer.encode('你好'  ,add_special_tokens=__a      )
							A						   =   tokenizer.encode('你是谁'  ,add_special_tokens=__a      )

							A						   =   tokenizer.build_inputs_with_special_tokens(__a      )
							A						   =   tokenizer.build_inputs_with_special_tokens(__a  ,__a      )

							assert encoded_sentence == [1] + text + [2]
							assert encoded_pair == [1] + text + [2] + text_a + [2]




						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[Any]      )     ->   int:
							A						   =   self.get_tokenizers(do_lower_case=__a      )
							for tokenizer in tokenizers:
								with self.subTest(F'{tokenizer.__class__.__name__}'      ):
									A						   =   "你好，你是谁"
									A						   =   tokenizer.tokenize(__a      )
									A						   =   tokenizer.convert_tokens_to_ids(__a      )
									A						   =   tokenizer.convert_tokens_to_shape_ids(__a      )
									A						   =   tokenizer.convert_tokens_to_pronunciation_ids(__a      )
									A						   =   tokenizer.prepare_for_model(
									    __a  ,__a  ,__a  ,add_special_tokens=__a      )

									A						   =   tokenizer.encode_plus(__a  ,add_special_tokens=__a      )

									self.assertEqual(__a  ,__a      )


"""simple docstring"""


from collections import deque
from math import floor
from random import random
from time import time







class 				lowerCAmelCase_				:



						'''simple docstring'''


						def __init__( self     :      Dict      )     ->   int:
							A						   =   {}


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Any  ,A_     :      Union[str, Any]  ,A_     :      Any  ,A_     :      Optional[Any]=1      )     ->   int:
							if self.graph.get(A_      ):
								if self.graph[u].count([w, v]      ) == 0:
									self.graph[u].append([w, v]      )
							else:
								A						   =   [[w, v]]
							if not self.graph.get(A_      ):
								A						   =   []


						def 						_SCREAMING_SNAKE_CASE      ( self     :      List[str]      )     ->   Optional[int]:
							return list(self.graph      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Union[str, Any]  ,A_     :      Union[str, Any]  ,A_     :      Dict      )     ->   Optional[Any]:
							if self.graph.get(A_      ):
								for _ in self.graph[u]:
									if _[1] == v:
										self.graph[u].remove(A_      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Any  ,A_     :      int=-2  ,A_     :      Dict=-1      )     ->   str:
							if s == d:
								return []
							A						   =   []
							A						   =   []
							if s == -2:
								A						   =   list(self.graph      )[0]
							stack.append(A_      )
							visited.append(A_      )
							A						   =   s

							while True:
								# check if there is any non isolated nodes
								if len(self.graph[s]      ) != 0:
									A						   =   s
									for node in self.graph[s]:
										if visited.count(node[1]      ) < 1:
											if node[1] == d:
												visited.append(A_      )
												return visited
											else:
												stack.append(node[1]      )
												visited.append(node[1]      )
												A						   =   node[1]
												break

            # check if all the children are visited
								if s == ss:
									stack.pop()
									if len(A_      ) != 0:
										A						   =   stack[len(A_      ) - 1]
								else:
									A						   =   ss

								# check if se have reached the starting point
								if len(A_      ) == 0:
									return visited


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[Any]  ,A_     :      Any=-1      )     ->   int:
							if c == -1:
								A						   =   floor(random() * 1_0000      ) + 10
							for i in range(A_      ):
								# every vertex has max 100 edges
								for _ in range(floor(random() * 102      ) + 1      ):
									A						   =   floor(random() * c      ) + 1
									if n != i:
										self.add_pair(A_  ,A_  ,1      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[Any]  ,A_     :      Union[str, Any]=-2      )     ->   Optional[Any]:
							A						   =   deque()
							A						   =   []
							if s == -2:
								A						   =   list(self.graph      )[0]
							d.append(A_      )
							visited.append(A_      )
							while d:
								A						   =   d.popleft()
								if len(self.graph[s]      ) != 0:
									for node in self.graph[s]:
										if visited.count(node[1]      ) < 1:
											d.append(node[1]      )
											visited.append(node[1]      )
							return visited


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Union[str, Any]  ,A_     :      Tuple      )     ->   Any:
							A						   =   0
							for x in self.graph:
								for y in self.graph[x]:
									if y[1] == u:
										count += 1
							return count


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Dict  ,A_     :      Union[str, Any]      )     ->   str:
							return len(self.graph[u]      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[int]  ,A_     :      Union[str, Any]=-2      )     ->   Any:
							A						   =   []
							A						   =   []
							if s == -2:
								A						   =   list(self.graph      )[0]
							stack.append(A_      )
							visited.append(A_      )
							A						   =   s
							A						   =   []

							while True:
								# check if there is any non isolated nodes
								if len(self.graph[s]      ) != 0:
									A						   =   s
									for node in self.graph[s]:
										if visited.count(node[1]      ) < 1:
											stack.append(node[1]      )
											visited.append(node[1]      )
											A						   =   node[1]
											break

            # check if all the children are visited
								if s == ss:
									sorted_nodes.append(stack.pop()      )
									if len(A_      ) != 0:
										A						   =   stack[len(A_      ) - 1]
								else:
									A						   =   ss

								# check if se have reached the starting point
								if len(A_      ) == 0:
									return sorted_nodes


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[Any]      )     ->   Tuple:
							A						   =   []
							A						   =   []
							A						   =   list(self.graph      )[0]
							stack.append(A_      )
							visited.append(A_      )
							A						   =   -2
							A						   =   []
							A						   =   s
							A						   =   False
							A						   =   set()

							while True:
								# check if there is any non isolated nodes
								if len(self.graph[s]      ) != 0:
									A						   =   s
									for node in self.graph[s]:
										if (
										    visited.count(node[1]      ) > 0
										    and node[1] != parent
										    and indirect_parents.count(node[1]      ) > 0
										    and not on_the_way_back
										):
											A						   =   len(A_      ) - 1
											while len_stack >= 0:
												if stack[len_stack] == node[1]:
													anticipating_nodes.add(node[1]      )
													break
												else:
													anticipating_nodes.add(stack[len_stack]      )
													len_stack -= 1
										if visited.count(node[1]      ) < 1:
											stack.append(node[1]      )
											visited.append(node[1]      )
											A						   =   node[1]
											break

            # check if all the children are visited
								if s == ss:
									stack.pop()
									A						   =   True
									if len(A_      ) != 0:
										A						   =   stack[len(A_      ) - 1]
								else:
									A						   =   False
									indirect_parents.append(A_      )
									A						   =   s
									A						   =   ss

								# check if se have reached the starting point
								if len(A_      ) == 0:
									return list(A_      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      int      )     ->   Optional[int]:
							A						   =   []
							A						   =   []
							A						   =   list(self.graph      )[0]
							stack.append(A_      )
							visited.append(A_      )
							A						   =   -2
							A						   =   []
							A						   =   s
							A						   =   False
							A						   =   set()

							while True:
								# check if there is any non isolated nodes
								if len(self.graph[s]      ) != 0:
									A						   =   s
									for node in self.graph[s]:
										if (
										    visited.count(node[1]      ) > 0
										    and node[1] != parent
										    and indirect_parents.count(node[1]      ) > 0
										    and not on_the_way_back
										):
											A						   =   len(A_      ) - 1
											while len_stack_minus_one >= 0:
												if stack[len_stack_minus_one] == node[1]:
													anticipating_nodes.add(node[1]      )
													break
												else:
													return True
										if visited.count(node[1]      ) < 1:
											stack.append(node[1]      )
											visited.append(node[1]      )
											A						   =   node[1]
											break

            # check if all the children are visited
								if s == ss:
									stack.pop()
									A						   =   True
									if len(A_      ) != 0:
										A						   =   stack[len(A_      ) - 1]
								else:
									A						   =   False
									indirect_parents.append(A_      )
									A						   =   s
									A						   =   ss

								# check if se have reached the starting point
								if len(A_      ) == 0:
									return False


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Dict  ,A_     :      Tuple=-2  ,A_     :      List[str]=-1      )     ->   str:
							A						   =   time()
							self.dfs(A_  ,A_      )
							A						   =   time()
							return end - begin




						def 						_SCREAMING_SNAKE_CASE      ( self     :      List[str]  ,A_     :      Union[str, Any]=-2      )     ->   Dict:
							A						   =   time()
							self.bfs(A_      )
							A						   =   time()
							return end - begin







class 				lowerCAmelCase_				:



						'''simple docstring'''


						def __init__( self     :      List[Any]      )     ->   Tuple:
							A						   =   {}


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Any  ,A_     :      Optional[Any]  ,A_     :      str  ,A_     :      List[str]=1      )     ->   Dict:
							# check if the u exists
							if self.graph.get(A_      ):
								# if there already is a edge
								if self.graph[u].count([w, v]      ) == 0:
									self.graph[u].append([w, v]      )
							else:
								# if u does not exist
								A						   =   [[w, v]]
							# add the other way
							if self.graph.get(A_      ):
								# if there already is a edge
								if self.graph[v].count([w, u]      ) == 0:
									self.graph[v].append([w, u]      )
							else:
								# if u does not exist
								A						   =   [[w, u]]


						def 						_SCREAMING_SNAKE_CASE      ( self     :      List[Any]  ,A_     :      List[Any]  ,A_     :      List[str]      )     ->   List[Any]:
							if self.graph.get(A_      ):
								for _ in self.graph[u]:
									if _[1] == v:
										self.graph[u].remove(A_      )
        # the other way round
							if self.graph.get(A_      ):
								for _ in self.graph[v]:
									if _[1] == u:
										self.graph[v].remove(A_      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      List[Any]  ,A_     :      List[str]=-2  ,A_     :      List[Any]=-1      )     ->   int:
							if s == d:
								return []
							A						   =   []
							A						   =   []
							if s == -2:
								A						   =   list(self.graph      )[0]
							stack.append(A_      )
							visited.append(A_      )
							A						   =   s

							while True:
								# check if there is any non isolated nodes
								if len(self.graph[s]      ) != 0:
									A						   =   s
									for node in self.graph[s]:
										if visited.count(node[1]      ) < 1:
											if node[1] == d:
												visited.append(A_      )
												return visited
											else:
												stack.append(node[1]      )
												visited.append(node[1]      )
												A						   =   node[1]
												break

            # check if all the children are visited
								if s == ss:
									stack.pop()
									if len(A_      ) != 0:
										A						   =   stack[len(A_      ) - 1]
								else:
									A						   =   ss

								# check if se have reached the starting point
								if len(A_      ) == 0:
									return visited


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Union[str, Any]  ,A_     :      Optional[int]=-1      )     ->   List[Any]:
							if c == -1:
								A						   =   floor(random() * 1_0000      ) + 10
							for i in range(A_      ):
								# every vertex has max 100 edges
								for _ in range(floor(random() * 102      ) + 1      ):
									A						   =   floor(random() * c      ) + 1
									if n != i:
										self.add_pair(A_  ,A_  ,1      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[Any]  ,A_     :      Dict=-2      )     ->   List[Any]:
							A						   =   deque()
							A						   =   []
							if s == -2:
								A						   =   list(self.graph      )[0]
							d.append(A_      )
							visited.append(A_      )
							while d:
								A						   =   d.popleft()
								if len(self.graph[s]      ) != 0:
									for node in self.graph[s]:
										if visited.count(node[1]      ) < 1:
											d.append(node[1]      )
											visited.append(node[1]      )
							return visited


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Union[str, Any]  ,A_     :      Optional[Any]      )     ->   List[Any]:
							return len(self.graph[u]      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      List[str]      )     ->   List[Any]:
							A						   =   []
							A						   =   []
							A						   =   list(self.graph      )[0]
							stack.append(A_      )
							visited.append(A_      )
							A						   =   -2
							A						   =   []
							A						   =   s
							A						   =   False
							A						   =   set()

							while True:
								# check if there is any non isolated nodes
								if len(self.graph[s]      ) != 0:
									A						   =   s
									for node in self.graph[s]:
										if (
										    visited.count(node[1]      ) > 0
										    and node[1] != parent
										    and indirect_parents.count(node[1]      ) > 0
										    and not on_the_way_back
										):
											A						   =   len(A_      ) - 1
											while len_stack >= 0:
												if stack[len_stack] == node[1]:
													anticipating_nodes.add(node[1]      )
													break
												else:
													anticipating_nodes.add(stack[len_stack]      )
													len_stack -= 1
										if visited.count(node[1]      ) < 1:
											stack.append(node[1]      )
											visited.append(node[1]      )
											A						   =   node[1]
											break

            # check if all the children are visited
								if s == ss:
									stack.pop()
									A						   =   True
									if len(A_      ) != 0:
										A						   =   stack[len(A_      ) - 1]
								else:
									A						   =   False
									indirect_parents.append(A_      )
									A						   =   s
									A						   =   ss

								# check if se have reached the starting point
								if len(A_      ) == 0:
									return list(A_      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[int]      )     ->   Any:
							A						   =   []
							A						   =   []
							A						   =   list(self.graph      )[0]
							stack.append(A_      )
							visited.append(A_      )
							A						   =   -2
							A						   =   []
							A						   =   s
							A						   =   False
							A						   =   set()

							while True:
								# check if there is any non isolated nodes
								if len(self.graph[s]      ) != 0:
									A						   =   s
									for node in self.graph[s]:
										if (
										    visited.count(node[1]      ) > 0
										    and node[1] != parent
										    and indirect_parents.count(node[1]      ) > 0
										    and not on_the_way_back
										):
											A						   =   len(A_      ) - 1
											while len_stack_minus_one >= 0:
												if stack[len_stack_minus_one] == node[1]:
													anticipating_nodes.add(node[1]      )
													break
												else:
													return True
										if visited.count(node[1]      ) < 1:
											stack.append(node[1]      )
											visited.append(node[1]      )
											A						   =   node[1]
											break

            # check if all the children are visited
								if s == ss:
									stack.pop()
									A						   =   True
									if len(A_      ) != 0:
										A						   =   stack[len(A_      ) - 1]
								else:
									A						   =   False
									indirect_parents.append(A_      )
									A						   =   s
									A						   =   ss

								# check if se have reached the starting point
								if len(A_      ) == 0:
									return False


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Dict      )     ->   Any:
							return list(self.graph      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[int]  ,A_     :      Optional[Any]=-2  ,A_     :      List[str]=-1      )     ->   Any:
							A						   =   time()
							self.dfs(A_  ,A_      )
							A						   =   time()
							return end - begin




						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[Any]  ,A_     :      List[Any]=-2      )     ->   Union[str, Any]:
							A						   =   time()
							self.bfs(A_      )
							A						   =   time()
							return end - begin