def reassemble(components, reassembly_rule):
    """Reassemble a list of strings given a reassembly rule.
    Note: reassembly rules are 1-indexed, according to the original paper.
    
    Parameters
    ----------
    components : str[]
        Components to be assembled according to `reassembly_rule`.
    reassembly_rule : str
        Rule stating how to reassemble `components`.

    Returns
    -------
    response : str
        Reassembled components.

    """

    response = 'Eliza: '

    # Split reassembly rule into its components
    reassembly_rule = reassembly_rule.split() 

    for comp in reassembly_rule:
        # If comp is a number, then place the component at that index
        if comp.isnumeric():
            # int(comp)-1 due to the fact that 
            # reassembly rules in Weizenbaum notation are 1-indexed
            response += components[int(comp)-1] + ' '
        # Otherwise, place the word itself
        else:
            response += comp + ' '

    # Remove trailing space
    response = response[:-1]

    return response