def build_min_edit_instructions(x: str, y: str, o: list) -> list:
    """Interprets the coordinates o (returned as second item of the tuple
    returned by extended_min_edit_distance) and creates a comprehensible list of
    instructions.

    The indices mentioned in the instructions are with respect to the original
    strings x and y and not with respect to the strings after having applied an
    modification, after an instruction."""

    instructions = []  # List for the instructions.

    c = (len(x), len(y))  # Initial coordinates for o.

    while c != (0, 0):
        # 3 cases:
        # 1. Go diagonally (to the left) => replace, if characters are different
        # 2. Go left  => remove from the first string
        # 3. Go up  => remove from the second string

        next_c = o[c[0]][c[1]]

        # Case 1.
        if next_c[0] < c[0] and next_c[1] < c[1]:

            if x[c[0] - 1] != y[c[1] - 1]:
                instructions.append("Replace char at index " + str(c[0] - 1) +
                                    " (" + x[c[0] - 1] + ") from '" + x +
                                    "' with char at index " + str(c[1] - 1) +
                                    " (" + y[c[1] - 1] + ") from '" + y + "'.")
        # Case 3.
        elif next_c[0] == c[0] and next_c[1] < c[1]:
            instructions.append("Insert into '" + x + "' at index " +
                                str(c[1] - 1) + " char at index " +
                                str(c[1] - 1) + " (" + y[c[1] - 1] + ") from '"
                                + y + "'.")

        # Case 2.
        else:  # next_c[0] < c[0] and next_c[1] == c[1]
            instructions.append("Delete from '" + x + "' char at index " +
                                str(c[0] - 1) + " (" + x[c[0] - 1] + ").")

        c = next_c

    instructions.reverse()
    return instructions