def cumulative_pagerank_difference_limit_push(s, r, w_i, a_i, push_node, rho):
    """
    Performs a random step without a self-loop.

    Inputs:  - s: A NumPy array that contains the approximate absorbing random walk cumulative probabilities.
             - r: A NumPy array that contains the residual probability distribution.
             - w_i: A NumPy array of probability transition weights from the seed nodes to its adjacent nodes.
             - a_i: A NumPy array of the nodes adjacent to the push node.
             - push_node: The node from which the residual probability is pushed to its adjacent nodes.
             - rho: The restart probability.

    Outputs: - s in 1xn: A NumPy array that contains the approximate absorbing random walk cumulative probabilities.
             - r in 1xn: A NumPy array that contains the residual probability distribution.
    """
    # Calculate the commute quantity
    commute = (1-rho)*r[push_node]

    # Update approximate regularized commute and residual vectors
    r[push_node] = 0.0

    # Update residual vector at push node's adjacent nodes
    commute_probabilities = commute * w_i
    s[a_i] += commute_probabilities
    r[a_i] += commute_probabilities