
# 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     UpperCAmelCase_  (						__lowerCAmelCase	) ->						Union[str, Any]:
    __lowercase		:			Dict	    =       [False] * len(__lowerCAmelCase	)
    __lowercase		:			int	    =       [-1] * len(__lowerCAmelCase	)

    def dfs(__lowerCAmelCase	,					__lowerCAmelCase	):
        __lowercase		:			Optional[int]	    =       True
        __lowercase		:			Any	    =       c
        for u in graph[v]:
            if not visited[u]:
                dfs(__lowerCAmelCase	,					1 - c	)

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

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

    return True


# Adjacency list of graph
__lowerCAmelCase					:			Tuple			      =		{0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: []}





print(check_bipartite_dfs(graph))




from math import factorial

__lowerCAmelCase					:			Dict			      =		{str(d): factorial(d) for d in range(10)}


def     UpperCAmelCase_  (						__lowerCAmelCase	) ->						int:
    return sum(DIGIT_FACTORIAL[d] for d in str(__lowerCAmelCase	)	)


def     UpperCAmelCase_  (						) ->						int:
    __lowercase		:			int	    =       7 * factorial(9	) + 1
    return sum(i for i in range(3	,					__lowerCAmelCase	) if sum_of_digit_factorial(__lowerCAmelCase	) == i	)


if __name__ == "__main__":
 print(F'{solution() = }')


