
"""simple docstring"""


import os
import unittest

from transformers import BertTokenizerFast
from transformers.models.bert.tokenization_bert import (
    VOCAB_FILES_NAMES,
    BasicTokenizer,
    BertTokenizer,
    WordpieceTokenizer,
    _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_				(      _lowercase		,					unittest.TestCase    ):



						'''simple docstring'''


						_lowerCamelCase:    Optional[Any]      =    BertTokenizer
						_lowerCamelCase:    str      =    BertTokenizerFast
						_lowerCamelCase:    List[str]      =    True
						_lowerCamelCase:    str      =    True
						_lowerCamelCase:    Optional[int]      =    filter_non_english


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Tuple      )     ->   Tuple:
							super().setUp()

							A						   =   [
							    '[UNK]',
							    '[CLS]',
							    '[SEP]',
							    '[PAD]',
							    '[MASK]',
							    'want',
							    '##want',
							    '##ed',
							    'wa',
							    'un',
							    'runn',
							    '##ing',
							    ',',
							    'low',
							    'lowest',
							]
							A						   =   os.path.join(self.tmpdirname  ,VOCAB_FILES_NAMES['vocab_file']      )
							with open(self.vocab_file  ,'w'  ,encoding='utf-8'      ) as vocab_writer:
								vocab_writer.write(''.join([x + '\n' for x in vocab_tokens]      )      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[int]  ,A_     :      Optional[Any]      )     ->   Optional[int]:
							A						   =   'UNwant\u00E9d,running'
							A						   =   'unwanted, running'
							return input_text, output_text


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Union[str, Any]      )     ->   Optional[int]:
							A						   =   self.tokenizer_class(self.vocab_file      )

							A						   =   tokenizer.tokenize('UNwant\u00E9d,running'      )
							self.assertListEqual(__UpperCamelCase  ,['un', '##want', '##ed', ',', 'runn', '##ing']      )
							self.assertListEqual(tokenizer.convert_tokens_to_ids(__UpperCamelCase      )  ,[9, 6, 7, 12, 10, 11]      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      List[str]      )     ->   int:
							if not self.test_rust_tokenizer:
								return

							A						   =   self.get_tokenizer()
							A						   =   self.get_rust_tokenizer()

							A						   =   'UNwant\u00E9d,running'

							A						   =   tokenizer.tokenize(__UpperCamelCase      )
							A						   =   rust_tokenizer.tokenize(__UpperCamelCase      )
							self.assertListEqual(__UpperCamelCase  ,__UpperCamelCase      )

							A						   =   tokenizer.encode(__UpperCamelCase  ,add_special_tokens=__UpperCamelCase      )
							A						   =   rust_tokenizer.encode(__UpperCamelCase  ,add_special_tokens=__UpperCamelCase      )
							self.assertListEqual(__UpperCamelCase  ,__UpperCamelCase      )

							A						   =   self.get_rust_tokenizer()
							A						   =   tokenizer.encode(__UpperCamelCase      )
							A						   =   rust_tokenizer.encode(__UpperCamelCase      )
							self.assertListEqual(__UpperCamelCase  ,__UpperCamelCase      )

							# With lower casing
							A						   =   self.get_tokenizer(do_lower_case=__UpperCamelCase      )
							A						   =   self.get_rust_tokenizer(do_lower_case=__UpperCamelCase      )

							A						   =   'UNwant\u00E9d,running'

							A						   =   tokenizer.tokenize(__UpperCamelCase      )
							A						   =   rust_tokenizer.tokenize(__UpperCamelCase      )
							self.assertListEqual(__UpperCamelCase  ,__UpperCamelCase      )

							A						   =   tokenizer.encode(__UpperCamelCase  ,add_special_tokens=__UpperCamelCase      )
							A						   =   rust_tokenizer.encode(__UpperCamelCase  ,add_special_tokens=__UpperCamelCase      )
							self.assertListEqual(__UpperCamelCase  ,__UpperCamelCase      )

							A						   =   self.get_rust_tokenizer()
							A						   =   tokenizer.encode(__UpperCamelCase      )
							A						   =   rust_tokenizer.encode(__UpperCamelCase      )
							self.assertListEqual(__UpperCamelCase  ,__UpperCamelCase      )


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Tuple      )     ->   Optional[Any]:
							A						   =   BasicTokenizer()

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


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Any      )     ->   Any:
							A						   =   BasicTokenizer(do_lower_case=__UpperCamelCase      )

							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[int]      )     ->   Any:
							A						   =   BasicTokenizer(do_lower_case=__UpperCamelCase  ,strip_accents=__UpperCamelCase      )

							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     :      Optional[int]      )     ->   Dict:
							A						   =   BasicTokenizer(do_lower_case=__UpperCamelCase  ,strip_accents=__UpperCamelCase      )

							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     :      List[Any]      )     ->   int:
							A						   =   BasicTokenizer(do_lower_case=__UpperCamelCase      )

							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      )     ->   Tuple:
							A						   =   BasicTokenizer(do_lower_case=__UpperCamelCase      )

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


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Union[str, Any]      )     ->   Dict:
							A						   =   BasicTokenizer(do_lower_case=__UpperCamelCase  ,strip_accents=__UpperCamelCase      )

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


						def 						_SCREAMING_SNAKE_CASE      ( self     :      int      )     ->   Optional[Any]:
							A						   =   BasicTokenizer(do_lower_case=__UpperCamelCase  ,strip_accents=__UpperCamelCase      )

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


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Union[str, Any]      )     ->   Any:
							A						   =   BasicTokenizer(do_lower_case=__UpperCamelCase  ,never_split=['[UNK]']      )

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


						def 						_SCREAMING_SNAKE_CASE      ( self     :      Optional[Any]      )     ->   str:
							A						   =   BasicTokenizer()
							A						   =   'a\n\'ll !!to?\'d of, can\'t.'
							A						   =   ['a', '\'', 'll', '!', '!', 'to', '?', '\'', 'd', 'of', ',', 'can', '\'', 't', '.']
							self.assertListEqual(tokenizer.tokenize(__UpperCamelCase      )  ,__UpperCamelCase      )


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

							A						   =   {}
							for i, token in enumerate(__UpperCamelCase      ):
								A						   =   i
							A						   =   WordpieceTokenizer(vocab=__UpperCamelCase  ,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     :      List[str]      )     ->   str:
							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     :      Optional[int]      )     ->   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     :      Dict      )     ->   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     :      Dict      )     ->   Optional[int]:
							A						   =   self.get_tokenizer()
							A						   =   self.get_rust_tokenizer()

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

							self.assertListEqual(
							    [rust_tokenizer.tokenize(__UpperCamelCase      ) for t in ['Test', '\xad', 'test']]  ,[['[UNK]'], [], ['[UNK]']]      )


						@slow
						def 						_SCREAMING_SNAKE_CASE      ( self     :      Union[str, Any]      )     ->   int:
							A						   =   self.tokenizer_class.from_pretrained('bert-base-uncased'      )

							A						   =   tokenizer.encode('sequence builders'  ,add_special_tokens=__UpperCamelCase      )
							A						   =   tokenizer.encode('multi-sequence build'  ,add_special_tokens=__UpperCamelCase      )

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

							assert encoded_sentence == [101] + text + [102]
							assert encoded_pair == [101] + text + [102] + text_a + [102]


						def 						_SCREAMING_SNAKE_CASE      ( self     :      List[Any]      )     ->   int:
							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(__UpperCamelCase  ,**__UpperCamelCase      )

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

									A						   =   tokenizer_r.do_lower_case if hasattr(__UpperCamelCase  ,'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     :      List[str]      )     ->   Tuple:
							A						   =   ['的', '人', '有']
							A						   =   ''.join(__UpperCamelCase      )
							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(__UpperCamelCase  ,**__UpperCamelCase      )
									A						   =   self.rust_tokenizer_class.from_pretrained(__UpperCamelCase  ,**__UpperCamelCase      )

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

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

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

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

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

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

									# 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(__UpperCamelCase      )
									]
									self.assertListEqual(__UpperCamelCase  ,__UpperCamelCase      )
									self.assertListEqual(__UpperCamelCase  ,__UpperCamelCase      )


"""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