






"""simple docstring"""


from collections import deque



def    lowerCAmelCase							(       __UpperCamelCase					):




  """simple docstring"""







  return input(__UpperCamelCase					).strip().split(''' '''					)



def    lowerCAmelCase							(       __UpperCamelCase						,			__UpperCamelCase					):




  """simple docstring"""







  __A		     =					{}
  for i in range(__UpperCamelCase					):
    __A		     =					[]

  for e in range(__UpperCamelCase					):
    __A     ,       __A		     =					(int(__UpperCamelCase					) for i in _input(f'Edge {e + 1}: <node1> <node2> '					))
    graph[x].append(__UpperCamelCase					)
  return graph



def    lowerCAmelCase							(       __UpperCamelCase						,			__UpperCamelCase					):




  """simple docstring"""







  __A		     =					{}
  for i in range(__UpperCamelCase					):
    __A		     =					[]

  for e in range(__UpperCamelCase					):
    __A     ,       __A		     =					(int(__UpperCamelCase					) for i in _input(f'Edge {e + 1}: <node1> <node2> '					))
    graph[x].append(__UpperCamelCase					)
    graph[y].append(__UpperCamelCase					)
  return graph



def    lowerCAmelCase							(       __UpperCamelCase						,			__UpperCamelCase					):




  """simple docstring"""







  __A		     =					{}
  for i in range(__UpperCamelCase					):
    __A		     =					[]

  for e in range(__UpperCamelCase					):
    __A     ,       __A     ,       __A		     =					(int(__UpperCamelCase					) for i in _input(f'Edge {e + 1}: <node1> <node2> <weight> '					))
    graph[x].append((y, w)					)
    graph[y].append((x, w)					)
  return graph


if __name__ == "__main__":
       lowercase_	,						lowercase_								=	(int(i) for i in _input('Number of nodes and edges: '))

       lowercase_								=	int(
           _input(
               'Press 1 or 2 or 3 \n'
               '1. Unweighted directed \n'
               '2. Unweighted undirected \n'
               '3. Weighted undirected \n'
           )[0]
       )

       lowercase_								=	{
           1: initialize_unweighted_directed_graph,
           2: initialize_unweighted_undirected_graph,
           3: initialize_weighted_undirected_graph,
       }[graph_choice](n, m)



def    lowerCAmelCase							(       __UpperCamelCase						,			__UpperCamelCase					):




  """simple docstring"""







  __A     ,       __A		     =					{s}, [s]
  print(__UpperCamelCase					)
  while _s:
    __A		     =					0
    for i in g[_s[-1]]:
      if i not in vis:
        _s.append(__UpperCamelCase					)
        vis.add(__UpperCamelCase					)
        __A		     =					1
        print(__UpperCamelCase					)
        break
    if not flag:
      _s.pop()



def    lowerCAmelCase							(       __UpperCamelCase						,			__UpperCamelCase					):




  """simple docstring"""







  __A     ,       __A		     =					{s}, deque([s]					)
  print(__UpperCamelCase					)
  while q:
    __A		     =					q.popleft()
    for v in g[u]:
      if v not in vis:
        vis.add(__UpperCamelCase					)
        q.append(__UpperCamelCase					)
        print(__UpperCamelCase					)



def    lowerCAmelCase							(       __UpperCamelCase						,			__UpperCamelCase					):




  """simple docstring"""







  __A     ,       __A     ,       __A		     =					{s: 0}, set(), {s: 0}
  while True:
    if len(__UpperCamelCase					) == len(__UpperCamelCase					) - 1:
      break
    __A		     =					1_0_0_0_0_0
    for i in dist:
      if i not in known and dist[i] < mini:
        __A		     =					dist[i]
        __A		     =					i
    known.add(__UpperCamelCase					)
    for v in g[u]:
      if v[0] not in known and dist[u] + v[1] < dist.get(v[0]						,			1_0_0_0_0_0					):
        __A		     =					dist[u] + v[1]
        __A		     =					u
  for i in dist:
    if i != s:
      print(dist[i]					)



def    lowerCAmelCase							(       __UpperCamelCase						,			__UpperCamelCase=None						,			__UpperCamelCase=None					):




  """simple docstring"""







  if q is None:
    __A		     =					[1]
  if ind is None:
    __A		     =					[0] * (len(__UpperCamelCase					) + 1)  # SInce oth Index is ignored
    for u in g:
      for v in g[u]:
        ind[v] += 1
    __A		     =					deque()
    for i in g:
      if ind[i] == 0:
        q.append(__UpperCamelCase					)
  if len(__UpperCamelCase					) == 0:
    return
  __A		     =					q.popleft()
  print(__UpperCamelCase					)
  for w in g[v]:
    ind[w] -= 1
    if ind[w] == 0:
      q.append(__UpperCamelCase					)
  topo(__UpperCamelCase						,			__UpperCamelCase						,			__UpperCamelCase					)



def    lowerCAmelCase							(       ):




  """simple docstring"""







  __A		     =					input().strip()
  __A		     =					[]
  for _ in range(__UpperCamelCase					):
    a.append(map(__UpperCamelCase						,			input().strip().split()					)					)
  return a, n



def    lowerCAmelCase							(       __UpperCamelCase					):




  """simple docstring"""







  ((__A)     ,       (__A))		     =					a_and_n
  __A		     =					list(__UpperCamelCase					)
  __A		     =					[[0] * n for i in range(__UpperCamelCase					)]
  for k in range(__UpperCamelCase					):
    for i in range(__UpperCamelCase					):
      for j in range(__UpperCamelCase					):
        if dist[i][j] > dist[i][k] + dist[k][j]:
          __A		     =					dist[i][k] + dist[k][j]
          __A		     =					k
  print(__UpperCamelCase					)



def    lowerCAmelCase							(       __UpperCamelCase						,			__UpperCamelCase					):




  """simple docstring"""







  __A     ,       __A     ,       __A		     =					{s: 0}, set(), {s: 0}
  while True:
    if len(__UpperCamelCase					) == len(__UpperCamelCase					) - 1:
      break
    __A		     =					1_0_0_0_0_0
    for i in dist:
      if i not in known and dist[i] < mini:
        __A		     =					dist[i]
        __A		     =					i
    known.add(__UpperCamelCase					)
    for v in g[u]:
      if v[0] not in known and v[1] < dist.get(v[0]						,			1_0_0_0_0_0					):
        __A		     =					v[1]
        __A		     =					u
  return dist



def    lowerCAmelCase							(       ):




  """simple docstring"""







  __A     ,       __A		     =					map(__UpperCamelCase						,			input().split(''' '''					)					)
  __A		     =					[]
  for _ in range(__UpperCamelCase					):
    edges.append(map(__UpperCamelCase						,			input().split(''' '''					)					)					)
  return edges, n



def    lowerCAmelCase							(       __UpperCamelCase					):




  """simple docstring"""







  ((__A)     ,       (__A))		     =					e_and_n
  e.sort(reverse=__UpperCamelCase						,			key=lambda __UpperCamelCase					: x[2]					)
  __A		     =					[{i} for i in range(1						,			n + 1					)]
  while True:
    if len(__UpperCamelCase					) == 1:
      break
    print(__UpperCamelCase					)
    __A		     =					e.pop()
    for i in range(len(__UpperCamelCase					)					):
      if x[0] in s[i]:
        break
    for j in range(len(__UpperCamelCase					)					):
      if x[1] in s[j]:
        if i == j:
          break
        s[j].update(s[i]					)
        s.pop(__UpperCamelCase					)
        break





def    lowerCAmelCase							(       __UpperCamelCase					):




  """simple docstring"""







  __A		     =					[]
  for node in graph:
    if not graph[node]:
      isolated.append(__UpperCamelCase					)
  return isolated












"""simple docstring"""


import os
from typing import List, Union

import tensorflow as tf
from tensorflow_text import BertTokenizer as BertTokenizerLayer
from tensorflow_text import FastBertTokenizer, ShrinkLongestTrimmer, case_fold_utfa, combine_segments, pad_model_inputs

from .tokenization_bert import BertTokenizer


class    snake_case						(				tf.keras.layers.Layer		):


   '''simple docstring'''

   def __init__(      self					:	List[str],			_lowerCamelCase					:	List,			_lowerCamelCase					:	bool,			_lowerCamelCase					:	int = None,			_lowerCamelCase					:	int = None,			_lowerCamelCase					:	int = None,			_lowerCamelCase					:	str = "longest",			_lowerCamelCase					:	bool = True,			_lowerCamelCase					:	int = 5_12,			_lowerCamelCase					:	int = None,			_lowerCamelCase					:	bool = True,			_lowerCamelCase					:	bool = True,			_lowerCamelCase					:	bool = True,			**_lowerCamelCase					:	int,			):

     '''simple docstring'''
     super().__init__()
     if use_fast_bert_tokenizer:
       __A		     =					FastBertTokenizer(
           _lowerCamelCase,			token_out_type=tf.intaa,			lower_case_nfd_strip_accents=_lowerCamelCase,			**_lowerCamelCase    )
     else:
       __A		     =					tf.lookup.StaticVocabularyTable(
           tf.lookup.KeyValueTensorInitializer(
               keys=_lowerCamelCase,			key_dtype=tf.string,			values=tf.range(tf.size(_lowerCamelCase,			out_type=tf.intaa    ),			dtype=tf.intaa    ),			value_dtype=tf.intaa,			),			num_oov_buckets=1,			)
       __A		     =					BertTokenizerLayer(
           _lowerCamelCase,			token_out_type=tf.intaa,			lower_case=_lowerCamelCase,			**_lowerCamelCase    )

     __A		     =					vocab_list
     __A		     =					do_lower_case
     __A		     =					cls_token_id or vocab_list.index('''[CLS]'''    )
     __A		     =					sep_token_id or vocab_list.index('''[SEP]'''    )
     __A		     =					pad_token_id or vocab_list.index('''[PAD]'''    )
     __A		     =					ShrinkLongestTrimmer(max_length - 3,			axis=1    )  # Allow room for special tokens
     __A		     =					max_length
     __A		     =					padding
     __A		     =					truncation
     __A		     =					pad_to_multiple_of
     __A		     =					return_token_type_ids
     __A		     =					return_attention_mask


   @classmethod
   def 							_SCREAMING_SNAKE_CASE							(      cls					:	int,			_lowerCamelCase					:	"PreTrainedTokenizerBase",			**_lowerCamelCase					:	List[Any]    ):  # noqa: F821

     '''simple docstring'''
     __A		     =					kwargs.pop('''do_lower_case''',			_lowerCamelCase    )
     __A		     =					tokenizer.do_lower_case if do_lower_case is None else do_lower_case
     __A		     =					kwargs.pop('''cls_token_id''',			_lowerCamelCase    )
     __A		     =					tokenizer.cls_token_id if cls_token_id is None else cls_token_id
     __A		     =					kwargs.pop('''sep_token_id''',			_lowerCamelCase    )
     __A		     =					tokenizer.sep_token_id if sep_token_id is None else sep_token_id
     __A		     =					kwargs.pop('''pad_token_id''',			_lowerCamelCase    )
     __A		     =					tokenizer.pad_token_id if pad_token_id is None else pad_token_id

     __A		     =					tokenizer.get_vocab()
     __A		     =					sorted([(wordpiece, idx) for wordpiece, idx in vocab.items()],			key=lambda _lowerCamelCase    : x[1]    )
     __A		     =					[entry[0] for entry in vocab]
     return cls(
         vocab_list=_lowerCamelCase,			do_lower_case=_lowerCamelCase,			cls_token_id=_lowerCamelCase,			sep_token_id=_lowerCamelCase,			pad_token_id=_lowerCamelCase,			**_lowerCamelCase,			)


   @classmethod
   def 							_SCREAMING_SNAKE_CASE							(      cls					:	Optional[Any],			_lowerCamelCase					:	Union[str, os.PathLike],			*_lowerCamelCase					:	Any,			**_lowerCamelCase					:	List[str]    ):

     '''simple docstring'''
     try:
       __A		     =					BertTokenizer.from_pretrained(_lowerCamelCase,			*_lowerCamelCase,			**_lowerCamelCase    )
     except:  # noqa: E722
       from .tokenization_bert_fast import BertTokenizerFast

       __A		     =					BertTokenizerFast.from_pretrained(_lowerCamelCase,			*_lowerCamelCase,			**_lowerCamelCase    )
     return cls.from_tokenizer(_lowerCamelCase,			**_lowerCamelCase    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	List[Any],			_lowerCamelCase					:	Tuple    ):

     '''simple docstring'''
     if self.do_lower_case:
       __A		     =					case_fold_utfa(_lowerCamelCase    )
     __A		     =					self.tf_tokenizer.tokenize(_lowerCamelCase    )
     return tokens.merge_dims(1,			-1    )


   def 							_SCREAMING_SNAKE_CASE							(      self					:	Dict,			_lowerCamelCase					:	Any,			_lowerCamelCase					:	Dict=None,			_lowerCamelCase					:	Optional[int]=None,			_lowerCamelCase					:	Union[str, Any]=None,			_lowerCamelCase					:	Any=None,			_lowerCamelCase					:	List[Any]=None,			_lowerCamelCase					:	str=None,			_lowerCamelCase					:	Dict=None,			):

     '''simple docstring'''
     if padding is None:
       __A		     =					self.padding
     if padding not in ("longest", "max_length"):
       raise ValueError('''Padding must be either \'longest\' or \'max_length\'!'''    )
     if max_length is not None and text_pair is not None:
       # Because we have to instantiate a Trimmer to do it properly
       raise ValueError('''max_length cannot be overridden at call time when truncating paired texts!'''    )
     if max_length is None:
       __A		     =					self.max_length
     if truncation is None:
       __A		     =					self.truncation
     if pad_to_multiple_of is None:
       __A		     =					self.pad_to_multiple_of
     if return_token_type_ids is None:
       __A		     =					self.return_token_type_ids
     if return_attention_mask is None:
       __A		     =					self.return_attention_mask
     if not isinstance(_lowerCamelCase,			tf.Tensor    ):
       __A		     =					tf.convert_to_tensor(_lowerCamelCase    )
     if text_pair is not None and not isinstance(_lowerCamelCase,			tf.Tensor    ):
       __A		     =					tf.convert_to_tensor(_lowerCamelCase    )
     if text_pair is not None:
       if text.shape.rank > 1:
         raise ValueError('''text argument should not be multidimensional when a text pair is supplied!'''    )
       if text_pair.shape.rank > 1:
         raise ValueError('''text_pair should not be multidimensional!'''    )
     if text.shape.rank == 2:
       __A     ,       __A		     =					text[:, 0], text[:, 1]
     __A		     =					self.unpaired_tokenize(_lowerCamelCase    )
     if text_pair is None:  # Unpaired text
       if truncation:
         __A		     =					text[:, : max_length - 2]  # Allow room for special tokens
       __A     ,       __A		     =					combine_segments(
           (text,),			start_of_sequence_id=self.cls_token_id,			end_of_segment_id=self.sep_token_id    )
     else:  # Paired text
       __A		     =					self.unpaired_tokenize(_lowerCamelCase    )
       if truncation:
         __A     ,       __A		     =					self.paired_trimmer.trim([text, text_pair]    )
       __A     ,       __A		     =					combine_segments(
           (text, text_pair),			start_of_sequence_id=self.cls_token_id,			end_of_segment_id=self.sep_token_id    )
     if padding == "longest":
       __A		     =					input_ids.bounding_shape(axis=1    )
       if pad_to_multiple_of is not None:
         # No ceiling division in tensorflow, so we negate floordiv instead
         __A		     =					pad_to_multiple_of * (-tf.math.floordiv(-pad_length,			_lowerCamelCase    ))
     else:
       __A		     =					max_length

     __A     ,       __A		     =					pad_model_inputs(_lowerCamelCase,			max_seq_length=_lowerCamelCase,			pad_value=self.pad_token_id    )
     __A		     =					{'''input_ids''': input_ids}
     if return_attention_mask:
       __A		     =					attention_mask
     if return_token_type_ids:
       __A     ,       __A		     =					pad_model_inputs(
           _lowerCamelCase,			max_seq_length=_lowerCamelCase,			pad_value=self.pad_token_id    )
       __A		     =					token_type_ids
     return output






   def 							_SCREAMING_SNAKE_CASE							(      self					:	Optional[Any]    ):

     '''simple docstring'''
     return {
         "vocab_list": self.vocab_list,
         "do_lower_case": self.do_lower_case,
         "cls_token_id": self.cls_token_id,
         "sep_token_id": self.sep_token_id,
         "pad_token_id": self.pad_token_id,
     }




