
def 	SCREAMING_SNAKE_CASE__    (      __lowerCAmelCase    ,		__lowerCAmelCase							):
    assert x is not None
    assert y is not None

    snake_case__						=				len(__lowerCAmelCase							)
    snake_case__						=				len(__lowerCAmelCase							)

    # declaring the array for storing the dp values
    snake_case__						=				[[0] * (n + 1) for _ in range(m + 1							)]  # noqa: E741

    for i in range(1    ,		m + 1							):
        for j in range(1    ,		n + 1							):
            snake_case__						=				1 if x[i - 1] == y[j - 1] else 0

            snake_case__						=				max(l[i - 1][j]    ,		l[i][j - 1]    ,		l[i - 1][j - 1] + match							)

    snake_case__						=				""
    snake_case__						,					snake_case__						=				m, n
    while i > 0 and j > 0:
        snake_case__						=				1 if x[i - 1] == y[j - 1] else 0

        if l[i][j] == l[i - 1][j - 1] + match:
            if match == 1:
                snake_case__						=				x[i - 1] + seq
            i -= 1
            j -= 1
        elif l[i][j] == l[i - 1][j]:
            i -= 1
        else:
            j -= 1

    return l[m][n], seq


if __name__ == "__main__":
     __magic_name__            =  '''AGGTAB'''
     __magic_name__            =  '''GXTXAYB'''
     __magic_name__            =  4
     __magic_name__            =  '''GTAB'''

     __magic_name__       ,      __magic_name__            =  longest_common_subsequence(a, b)
     print('''len =''', ln, ''', sub-sequence =''', subseq)
     import doctest

     doctest.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 	SCREAMING_SNAKE_CASE__    (      __lowerCAmelCase							):
    snake_case__						=				[False] * len(__lowerCAmelCase							)
    snake_case__						=				[-1] * len(__lowerCAmelCase							)

    def dfs(__lowerCAmelCase    ,		__lowerCAmelCase							):
        snake_case__						=				True
        snake_case__						=				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
__magic_name__            =  {0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: []}





print(check_bipartite_dfs(graph))



