


'''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    lowerCamelCase__     ( tf.keras.layers.Layer):





     def __init__(self	,  UpperCAmelCase	,  UpperCAmelCase	,  UpperCAmelCase = None	,  UpperCAmelCase = None	,  UpperCAmelCase = None	,  UpperCAmelCase = "longest"	,  UpperCAmelCase = True	,  UpperCAmelCase = 5_1_2	,  UpperCAmelCase = None	,  UpperCAmelCase = True	,  UpperCAmelCase = True	,  UpperCAmelCase = True	,  **UpperCAmelCase	,  )  ->     List[str]:
      super().__init__()
      if use_fast_bert_tokenizer:
       _lowercase							   =FastBertTokenizer(
           UpperCAmelCase	,  token_out_type=tf.intaa	,  lower_case_nfd_strip_accents=UpperCAmelCase	,  **UpperCAmelCase )
      else:
       _lowercase							   =tf.lookup.StaticVocabularyTable(
           tf.lookup.KeyValueTensorInitializer(
               keys=UpperCAmelCase	,  key_dtype=tf.string	,  values=tf.range(tf.size(UpperCAmelCase	,  out_type=tf.intaa )	,  dtype=tf.intaa )	,  value_dtype=tf.intaa	,  )	,  num_oov_buckets=1	,  )
       _lowercase							   =BertTokenizerLayer(
           UpperCAmelCase	,  token_out_type=tf.intaa	,  lower_case=UpperCAmelCase	,  **UpperCAmelCase )

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





     @classmethod
     def   __A      (cls	,  UpperCAmelCase	,  **UpperCAmelCase )  ->     Union[str, Any]:  # noqa: F821
      _lowercase							   =kwargs.pop('''do_lower_case'''	,  UpperCAmelCase )
      _lowercase							   =tokenizer.do_lower_case if do_lower_case is None else do_lower_case
      _lowercase							   =kwargs.pop('''cls_token_id'''	,  UpperCAmelCase )
      _lowercase							   =tokenizer.cls_token_id if cls_token_id is None else cls_token_id
      _lowercase							   =kwargs.pop('''sep_token_id'''	,  UpperCAmelCase )
      _lowercase							   =tokenizer.sep_token_id if sep_token_id is None else sep_token_id
      _lowercase							   =kwargs.pop('''pad_token_id'''	,  UpperCAmelCase )
      _lowercase							   =tokenizer.pad_token_id if pad_token_id is None else pad_token_id

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





     @classmethod
     def   __A      (cls	,  UpperCAmelCase	,  *UpperCAmelCase	,  **UpperCAmelCase )  ->     Optional[int]:
      try:
       _lowercase							   =BertTokenizer.from_pretrained(UpperCAmelCase	,  *UpperCAmelCase	,  **UpperCAmelCase )
      except:  # noqa: E722
       from .tokenization_bert_fast import BertTokenizerFast

       _lowercase							   =BertTokenizerFast.from_pretrained(UpperCAmelCase	,  *UpperCAmelCase	,  **UpperCAmelCase )
      return cls.from_tokenizer(UpperCAmelCase	,  **UpperCAmelCase )





     def   __A      (self	,  UpperCAmelCase )  ->     Optional[int]:
      if self.do_lower_case:
       _lowercase							   =case_fold_utfa(UpperCAmelCase )
      _lowercase							   =self.tf_tokenizer.tokenize(UpperCAmelCase )
      return tokens.merge_dims(1	,  -1 )





     def   __A      (self	,  UpperCAmelCase	,  UpperCAmelCase=None	,  UpperCAmelCase=None	,  UpperCAmelCase=None	,  UpperCAmelCase=None	,  UpperCAmelCase=None	,  UpperCAmelCase=None	,  UpperCAmelCase=None	,  )  ->     Union[str, Any]:
      if padding is None:
       _lowercase							   =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:
       _lowercase							   =self.max_length
      if truncation is None:
       _lowercase							   =self.truncation
      if pad_to_multiple_of is None:
       _lowercase							   =self.pad_to_multiple_of
      if return_token_type_ids is None:
       _lowercase							   =self.return_token_type_ids
      if return_attention_mask is None:
       _lowercase							   =self.return_attention_mask
      if not isinstance(UpperCAmelCase	,  tf.Tensor ):
       _lowercase							   =tf.convert_to_tensor(UpperCAmelCase )
      if text_pair is not None and not isinstance(UpperCAmelCase	,  tf.Tensor ):
       _lowercase							   =tf.convert_to_tensor(UpperCAmelCase )
      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:
       _lowercase   ,					_lowercase							   =text[:, 0], text[:, 1]
      _lowercase							   =self.unpaired_tokenize(UpperCAmelCase )
      if text_pair is None:  # Unpaired text
       if truncation:
        _lowercase							   =text[:, : max_length - 2]  # Allow room for special tokens
       _lowercase   ,					_lowercase							   =combine_segments(
           (text,)	,  start_of_sequence_id=self.cls_token_id	,  end_of_segment_id=self.sep_token_id )
      else:  # Paired text
       _lowercase							   =self.unpaired_tokenize(UpperCAmelCase )
       if truncation:
        _lowercase   ,					_lowercase							   =self.paired_trimmer.trim([text, text_pair] )
       _lowercase   ,					_lowercase							   =combine_segments(
           (text, text_pair)	,  start_of_sequence_id=self.cls_token_id	,  end_of_segment_id=self.sep_token_id )
      if padding == "longest":
       _lowercase							   =input_ids.bounding_shape(axis=1 )
       if pad_to_multiple_of is not None:
        # No ceiling division in tensorflow, so we negate floordiv instead
        _lowercase							   =pad_to_multiple_of * (-tf.math.floordiv(-pad_length	,  UpperCAmelCase ))
      else:
       _lowercase							   =max_length

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





     def   __A      (self )  ->     Optional[int]:
      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,
      }





from collections import deque
def        UpperCAmelCase_      (							__snake_case		)  ->    Any:







 """simple docstring"""


 return input(__snake_case		).strip().split(''' '''		)
def        UpperCAmelCase_      (							__snake_case  ,		__snake_case		)  ->    dict[int, list[int]]:







 """simple docstring"""


 _lowercase							   ={}
 for i in range(__snake_case		):
  _lowercase							   =[]

 for e in range(__snake_case		):
  _lowercase   ,					_lowercase							   =(int(__snake_case		) for i in _input(F"Edge {e + 1}: <node1> <node2> "		))
  graph[x].append(__snake_case		)
 return graph
def        UpperCAmelCase_      (							__snake_case  ,		__snake_case		)  ->    dict[int, list[int]]:







 """simple docstring"""


 _lowercase							   ={}
 for i in range(__snake_case		):
  _lowercase							   =[]

 for e in range(__snake_case		):
  _lowercase   ,					_lowercase							   =(int(__snake_case		) for i in _input(F"Edge {e + 1}: <node1> <node2> "		))
  graph[x].append(__snake_case		)
  graph[y].append(__snake_case		)
 return graph
def        UpperCAmelCase_      (							__snake_case  ,		__snake_case		)  ->    dict[int, list[tuple[int, int]]]:







 """simple docstring"""


 _lowercase							   ={}
 for i in range(__snake_case		):
  _lowercase							   =[]

 for e in range(__snake_case		):
  _lowercase   ,					_lowercase   ,					_lowercase							   =(int(__snake_case		) 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__":
  UpperCAmelCase__			,UpperCAmelCase__     			=							(int(i) for i in _input('''Number of nodes and edges: '''))

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

  UpperCAmelCase__     			=							{
      1: initialize_unweighted_directed_graph,
      2: initialize_unweighted_undirected_graph,
      3: initialize_weighted_undirected_graph,
  }[graph_choice](n, m)
def        UpperCAmelCase_      (							__snake_case  ,		__snake_case		)  ->    Tuple:







 """simple docstring"""


 _lowercase   ,					_lowercase							   ={s}, [s]
 print(__snake_case		)
 while _s:
  _lowercase							   =0
  for i in g[_s[-1]]:
   if i not in vis:
    _s.append(__snake_case		)
    vis.add(__snake_case		)
    _lowercase							   =1
    print(__snake_case		)
    break
  if not flag:
   _s.pop()
def        UpperCAmelCase_      (							__snake_case  ,		__snake_case		)  ->    int:







 """simple docstring"""


 _lowercase   ,					_lowercase							   ={s}, deque([s]		)
 print(__snake_case		)
 while q:
  _lowercase							   =q.popleft()
  for v in g[u]:
   if v not in vis:
    vis.add(__snake_case		)
    q.append(__snake_case		)
    print(__snake_case		)
def        UpperCAmelCase_      (							__snake_case  ,		__snake_case		)  ->    Optional[int]:







 """simple docstring"""


 _lowercase   ,					_lowercase   ,					_lowercase							   ={s: 0}, set(), {s: 0}
 while True:
  if len(__snake_case		) == len(__snake_case		) - 1:
   break
  _lowercase							   =100000
  for i in dist:
   if i not in known and dist[i] < mini:
    _lowercase							   =dist[i]
    _lowercase							   =i
  known.add(__snake_case		)
  for v in g[u]:
   if v[0] not in known and dist[u] + v[1] < dist.get(v[0]  ,		100000		):
    _lowercase							   =dist[u] + v[1]
    _lowercase							   =u
 for i in dist:
  if i != s:
   print(dist[i]		)
def        UpperCAmelCase_      (							__snake_case  ,		__snake_case=None  ,		__snake_case=None		)  ->    Tuple:







 """simple docstring"""


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







 """simple docstring"""


 _lowercase							   =input().strip()
 _lowercase							   =[]
 for _ in range(__snake_case		):
  a.append(map(__snake_case  ,		input().strip().split()		)		)
 return a, n
def        UpperCAmelCase_      (							__snake_case		)  ->    Any:







 """simple docstring"""


 ((_lowercase)   ,					(_lowercase))							   =a_and_n
 _lowercase							   =list(__snake_case		)
 _lowercase							   =[[0] * n for i in range(__snake_case		)]
 for k in range(__snake_case		):
  for i in range(__snake_case		):
   for j in range(__snake_case		):
    if dist[i][j] > dist[i][k] + dist[k][j]:
     _lowercase							   =dist[i][k] + dist[k][j]
     _lowercase							   =k
 print(__snake_case		)
def        UpperCAmelCase_      (							__snake_case  ,		__snake_case		)  ->    Optional[Any]:







 """simple docstring"""


 _lowercase   ,					_lowercase   ,					_lowercase							   ={s: 0}, set(), {s: 0}
 while True:
  if len(__snake_case		) == len(__snake_case		) - 1:
   break
  _lowercase							   =100000
  for i in dist:
   if i not in known and dist[i] < mini:
    _lowercase							   =dist[i]
    _lowercase							   =i
  known.add(__snake_case		)
  for v in g[u]:
   if v[0] not in known and v[1] < dist.get(v[0]  ,		100000		):
    _lowercase							   =v[1]
    _lowercase							   =u
 return dist
def        UpperCAmelCase_      (							)  ->    Dict:







 """simple docstring"""


 _lowercase   ,					_lowercase							   =map(__snake_case  ,		input().split(''' '''		)		)
 _lowercase							   =[]
 for _ in range(__snake_case		):
  edges.append(map(__snake_case  ,		input().split(''' '''		)		)		)
 return edges, n
def        UpperCAmelCase_      (							__snake_case		)  ->    str:







 """simple docstring"""


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



def        UpperCAmelCase_      (							__snake_case		)  ->    Tuple:







 """simple docstring"""


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

