






A_		:		List[Any]		     =			{
    'a': 'AAAAA',
    'b': 'AAAAB',
    'c': 'AAABA',
    'd': 'AAABB',
    'e': 'AABAA',
    'f': 'AABAB',
    'g': 'AABBA',
    'h': 'AABBB',
    'i': 'ABAAA',
    'j': 'BBBAA',
    'k': 'ABAAB',
    'l': 'ABABA',
    'm': 'ABABB',
    'n': 'ABBAA',
    'o': 'ABBAB',
    'p': 'ABBBA',
    'q': 'ABBBB',
    'r': 'BAAAA',
    's': 'BAAAB',
    't': 'BAABA',
    'u': 'BAABB',
    'v': 'BBBAB',
    'w': 'BABAA',
    'x': 'BABAB',
    'y': 'BABBA',
    'z': 'BABBB',
    ' ': ' ',
}


A_		:		List[Any]		     =			{value: key for key, value in encode_dict.items()}

def   snake_case (UpperCAmelCase__  )	->    str:
  UpperCamelCase_: Optional[Any]   				=    ''
  for letter in word.lower():
    if letter.isalpha() or letter == " ":
      encoded += encode_dict[letter]
    else:
      raise Exception('encode() accepts only letters of the alphabet and spaces'  )
  return encoded

def   snake_case (UpperCAmelCase__  )	->    str:
  if set(UpperCAmelCase__  ) - {"A", "B", " "} != set():
    raise Exception('decode() accepts only \'A\', \'B\' and spaces'  )
  UpperCamelCase_: Dict   				=    ''
  for word in coded.split():
    while len(UpperCAmelCase__  ) != 0:
      decoded += decode_dict[word[:5]]
      UpperCamelCase_: Dict   				=    word[5:]
    decoded += " "
  return decoded.strip()


if __name__ == "__main__":
   from doctest import testmod

   testmod()







# 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.

def   snake_case (UpperCAmelCase__  )	->    List[str]:
  UpperCamelCase_: int   				=    [False] * len(UpperCAmelCase__  )
  UpperCamelCase_: Any   				=    [-1] * len(UpperCAmelCase__  )

  def dfs(UpperCAmelCase__     ,   UpperCAmelCase__  ):
    UpperCamelCase_: Tuple   				=    True
    UpperCamelCase_: Optional[int]   				=    c
    for u in graph[v]:
      if not visited[u]:
        dfs(UpperCAmelCase__     ,   1 - c  )

  for i in range(len(UpperCAmelCase__  )  ):
    if not visited[i]:
      dfs(UpperCAmelCase__     ,   0  )

  for i in range(len(UpperCAmelCase__  )  ):
    for j in graph[i]:
      if color[i] == color[j]:
        return False

  return True


# Adjacency list of graph
A_		:		Dict		     =			{0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: []}
print(check_bipartite_dfs(graph))