#### Check Bipartite Graph Dfs

S
```from collections import defaultdict

def is_bipartite(graph: defaultdict[int, list[int]]) -> bool:
"""
Check whether a graph is Bipartite or not using Depth-First Search (DFS).

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. There is
no edge that connects vertices of the same set.

Args:
graph: An adjacency list representing the graph.

Returns:
True if there's no edge that connects vertices of the same set, False otherwise.

Examples:
>>> is_bipartite(
...     defaultdict(list, {0: [1, 2], 1: [0, 3], 2: [0, 4], 3: [1], 4: [2]})
... )
False
>>> is_bipartite(defaultdict(list, {0: [1, 2], 1: [0, 2], 2: [0, 1]}))
True
"""

def depth_first_search(node: int, color: int) -> bool:
visited[node] = color
return any(
visited[neighbour] == color
or (
visited[neighbour] == -1
and not depth_first_search(neighbour, 1 - color)
)
for neighbour in graph[node]
)

visited: defaultdict[int, int] = defaultdict(lambda: -1)

return all(
not (visited[node] == -1 and not depth_first_search(node, 0)) for node in graph
)

if __name__ == "__main__":
import doctest

result = doctest.testmod()

if result.failed:
print(f"{result.failed} test(s) failed.")
else:
print("All tests passed!")
```