<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _cuthill_mckee(vertices, vertices_neighbours):
 """Yield the Cuthill-McKee order for a connected, undirected graph. `Wikipedia <https://en.wikipedia.org/wiki/Cuthill%E2%80%93McKee_algorithm>`_ provides a good introduction to the Cuthill-McKee algorithm. The RCM algorithm attempts to order vertices in a graph such that their adjacency matrix's bandwidth is reduced. In brief the RCM algorithm is a breadth-first search with the following tweaks: * The search starts from the vertex with the lowest degree. * Vertices discovered in each layer of the search are sorted by ascending order of their degree in the output. .. warning:: This function must not be called on a disconnected or empty graph. Returns ------- """

    vertices_degrees = {v: sum(itervalues(vertices_neighbours[v]))
                        for v in vertices}

    peripheral_vertex = min(vertices, key=(lambda v: vertices_degrees[v]))

    visited = set([peripheral_vertex])
    cm_order = [peripheral_vertex]
    previous_layer = set([peripheral_vertex])
    while len(cm_order) < len(vertices):
        adjacent = set()
        for vertex in previous_layer:
            adjacent.update(vertices_neighbours[vertex])
        adjacent.difference_update(visited)

        visited.update(adjacent)
        cm_order.extend(sorted(adjacent, key=(lambda v: vertices_degrees[v])))
        previous_layer = adjacent

    return cm_order