def find_adjacent(overlapping_information: list, existing_nodes: list):
    """
    Gets a list of directly connected subgraphs and creates the indirect connections.

    :param overlapping_information: a list of lists each containing direct connections betweeen some subgraphs.
    :param existing_nodes: a list containing each existing node once.
    :return: a list of lists each containing all reachable subgraphs with other connected subgraphs in between.
    """
    result_connections = []
    for node in existing_nodes:

        already_checked = False
        for c in result_connections:
            if node in c:
                already_checked = True
                break
        if already_checked is True:
            continue

        connection_list = []
        connection_list.append(node)
        has_changed = True
        while has_changed is True:
            has_changed = False

            for direct_connection in overlapping_information:

                will_be_checked = False
                for n in connection_list:
                    if n in direct_connection:
                        will_be_checked = True
                        break

                if will_be_checked is True:
                    for new_node in direct_connection:
                        if new_node not in connection_list:
                            connection_list.append(new_node)
                            has_changed = True

        result_connections.append(connection_list)
    return result_connections