

# A Bipartite Graph is a graph whose vertices can be divided into two independent sets,
# U and V such that every edge (u, v) either connects a vertex from U to V or a vertex
# from V to U. In other words, for every edge (u, v), either u belongs to U and v to V,
# or u belongs to V and v to U. We can also say that there is no edge that connects
# vertices of same set.
from queue import Queue





def 	snake_case_      (__A     :						Dict     )			->	int:
   __lowerCAmelCase  :			Any					    =						Queue()
   __lowerCAmelCase  :			List[str]					    =						[False] * len(__A     )
   __lowerCAmelCase  :			List[Any]					    =						[-1] * len(__A     )

   def bfs():
      while not queue.empty():
         __lowerCAmelCase  :			str					    =						queue.get()
         __lowerCAmelCase  :			List[Any]					    =						True

         for neighbour in graph[u]:
            if neighbour == u:
               return False

            if color[neighbour] == -1:
               __lowerCAmelCase  :			Any					    =						1 - color[u]
               queue.put(__A     )

            elif color[neighbour] == color[u]:
               return False

      return True

   for i in range(len(__A     )     ):
      if not visited[i]:
         queue.put(__A     )
         __lowerCAmelCase  :			List[Any]					    =						0
         if bfs() is False:
            return False

   return True


if __name__ == "__main__":
   # Adjacency List of graph
   print(check_bipartite({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]}))





from .prime_check import Test

Test()


