class Node
    attr_accessor :value
    attr_accessor :prev
    attr_accessor :next
    def initialize(value="END", prev_node=nil, next_node=nil)
        @value = value
        @prev = prev_node
        @next = next_node
    end
end

class MyList
    def initialize(head = Node.new("END"), cursor = nil)
        @head = head
        @cursor = @head
    end

    def insert(x)
        new_node = Node.new(x)
        unless @cursor.prev.nil? 
            @cursor.prev.next = new_node
            new_node.prev = @cursor.prev
            @cursor.prev = new_node
            new_node.next = @cursor
        else
            new_node.next = @head
            @head.prev = new_node
            @head = new_node
        end
        @cursor = new_node
    end

    def move(n)
        if(n < 0)
            n.upto(-1) { @cursor = @cursor.prev unless @cursor.prev.nil?}
        else
            n.times { @cursor = @cursor.next unless @cursor.next.nil?}
        end
    end

    def erase()
        unless @cursor.value == "END"
            @cursor.next.prev = @cursor.prev
            @cursor.prev.next = @cursor.next unless @cursor.prev.nil?
            @cursor = @cursor.next
            @head = @cursor if @cursor.prev.nil?
        end
    end

    def print
        node = @head
        while(node.value != "END")
            puts node.value
            node = node.next
        end
    end

    def print_cursor
        puts "Current Cursor val: #{@cursor.value}"
        puts "Prev val: #{@cursor.prev.value}" unless @cursor.prev.nil?
        puts "Next val: #{@cursor.next.value}" unless @cursor.next.nil?

    end
end

L = MyList.new()
gets.chomp.to_i.times{
    choice, x = gets.chomp.split(" ")
    case choice
    when "0"
        L.insert(x)
    when "1"
        L.move(x.to_i)
    when "2"
        L.erase()
    end
    # puts "*****"
    # print "Current List: "
    # L.print
    # L.print_cursor
    # puts "*****"

}
L.print

