

"""simple docstring"""

# Author: OMKAR PATHAK, Nwachukwu Chidiebere

# Use a Python dictionary to construct the graph.
from __future__ import annotations

from pprint import pformat
from typing import Generic, TypeVar

_UpperCamelCase		     =    TypeVar("""T""")






class 			__a					(						Generic[T]       ):





       """simple docstring"""


       def __init__(   self			,					snake_case = True   ):





        """simple docstring"""

        lowerCAmelCase__   :				dict[T, list[T]] 			=				{}  # dictionary of lists
        lowerCAmelCase__   :				Any 			=				directed






       def 			SCREAMING_SNAKE_CASE_	(   self			,					snake_case			,					snake_case   ):





        """simple docstring"""

        if not self.directed:  # For undirected graphs
         # if both source vertex and destination vertex are both present in the
         # adjacency list, add destination vertex to source vertex list of adjacent
         # vertices and add source vertex to destination vertex list of adjacent
         # vertices.
         if source_vertex in self.adj_list and destination_vertex in self.adj_list:
          self.adj_list[source_vertex].append(snake_case   )
          self.adj_list[destination_vertex].append(snake_case   )
         # if only source vertex is present in adjacency list, add destination vertex
         # to source vertex list of adjacent vertices, then create a new vertex with
         # destination vertex as key and assign a list containing the source vertex
         # as it's first adjacent vertex.
         elif source_vertex in self.adj_list:
          self.adj_list[source_vertex].append(snake_case   )
          lowerCAmelCase__   :				Optional[int] 			=				[source_vertex]
         # if only destination vertex is present in adjacency list, add source vertex
         # to destination vertex list of adjacent vertices, then create a new vertex
         # with source vertex as key and assign a list containing the source vertex
         # as it's first adjacent vertex.
         elif destination_vertex in self.adj_list:
          self.adj_list[destination_vertex].append(snake_case   )
          lowerCAmelCase__   :				List[Any] 			=				[destination_vertex]
         # if both source vertex and destination vertex are not present in adjacency
         # list, create a new vertex with source vertex as key and assign a list
         # containing the destination vertex as it's first adjacent vertex also
         # create a new vertex with destination vertex as key and assign a list
         # containing the source vertex as it's first adjacent vertex.
         else:
          lowerCAmelCase__   :				Tuple 			=				[destination_vertex]
          lowerCAmelCase__   :				Dict 			=				[source_vertex]
        else:  # For directed graphs
         # if both source vertex and destination vertex are present in adjacency
         # list, add destination vertex to source vertex list of adjacent vertices.
         if source_vertex in self.adj_list and destination_vertex in self.adj_list:
          self.adj_list[source_vertex].append(snake_case   )
         # if only source vertex is present in adjacency list, add destination
         # vertex to source vertex list of adjacent vertices and create a new vertex
         # with destination vertex as key, which has no adjacent vertex
         elif source_vertex in self.adj_list:
          self.adj_list[source_vertex].append(snake_case   )
          lowerCAmelCase__   :				Optional[Any] 			=				[]
         # if only destination vertex is present in adjacency list, create a new
         # vertex with source vertex as key and assign a list containing destination
         # vertex as first adjacent vertex
         elif destination_vertex in self.adj_list:
          lowerCAmelCase__   :				List[str] 			=				[destination_vertex]
         # if both source vertex and destination vertex are not present in adjacency
         # list, create a new vertex with source vertex as key and a list containing
         # destination vertex as it's first adjacent vertex. Then create a new vertex
         # with destination vertex as key, which has no adjacent vertex
         else:
          lowerCAmelCase__   :				Tuple 			=				[destination_vertex]
          lowerCAmelCase__   :				str 			=				[]

        return self






       def __repr__(   self   ):





        """simple docstring"""

        return pformat(self.adj_list   )









"""simple docstring"""

def       SCREAMING_SNAKE_CASE							( lowercase__					,					lowercase__   )			->						float:
 if digit_amount > 0:
  return round(number - int(lowercase__   )					,					lowercase__   )
 return number - int(lowercase__   )


if __name__ == "__main__":
    print(decimal_isolate(1.53, 0))
    print(decimal_isolate(35.345, 1))
    print(decimal_isolate(35.345, 2))
    print(decimal_isolate(35.345, 3))
    print(decimal_isolate(-14.789, 3))
    print(decimal_isolate(0, 2))
    print(decimal_isolate(-14.123, 1))
    print(decimal_isolate(-14.123, 2))
    print(decimal_isolate(-14.123, 3))






