Problem: For a dynamic list $L$ of integers, perform a sequence of the following operations. $L$ has a special element called END at the end of the list and an element of $L$ is indicated by a cursor.

* insert($x$): Insert $x$ before the element indicated by the cursor. After this operation, the cursor points the inserted element.
* move($d$): Move the cursor to the end by $d$, if $d$ is positive. Move the cursor to the front by $d$, if $d$ is negative.
* erase(): Delete the element indicated by the cursor. After this operation, the cursor points the element next to the deleted element. In case there is no such element, the cursor should point END.



In the initial state, $L$ is empty and the cursor points END.

Constraints

* $1 \leq q \leq 500,000$
* The cursor indicates an element of $L$ or END during the operations
* Erase operation will not given when the cursor points END
* $-1,000,000,000 \leq x \leq 1,000,000,000$
* Moving distance of the cursor ($\sum{|d|}$) does not exceed 1,000,000
* $L$ is not empty after performing all operations

Input

The input is given in the following format.


$q$
$query_1$
$query_2$
:
$query_q$


Each query $query_i$ is given by


0 $x$


or


1 $d$


or


2


where the first digits 0, 1 and 2 represent insert, move and erase operations respectively.

Output

Print all elements of the list in order after performing given operations. Print an element in a line.

Example

Input

5
0 1
0 2
0 3
1 1
2


Output

3
1

Solution (in PYTHON3):

Solution:
class Node:
    def __init__(self, val=None, prev=None, nextNode=None):
        self.val = val
        self.prev = prev
        self.nextNode = nextNode

class LinkedList():
    def __init__(self):
        self.end = Node('END')
        self.cursol_node = self.end
    
    def insertBefore(self, x):
        new_node = Node(val=x, prev=self.cursol_node.prev, nextNode=self.cursol_node)
        if self.cursol_node.prev != None:
            self.cursol_node.prev.nextNode = new_node
        #現在のカーソルノードのprevを新しいノードとリンク
        self.cursol_node.prev = new_node
        #新しいノードをカーソルノードとする
        self.cursol_node = new_node

    def move(self, d):
        if d > 0:
            for i in range(d):
                #ノードのnextがENDになるまでカーソルノードを移動
                if self.cursol_node.nextNode == None:break
                self.cursol_node = self.cursol_node.nextNode
        elif d < 0:
            for i in range(abs(d)):
                if self.cursol_node.prev == None:break
                self.cursol_node = self.cursol_node.prev

    def erase(self):
        if self.cursol_node != self.end:
            if self.cursol_node.prev != None:
                #前提条件としてcursolがENDにある状態でeraseは行われないため、prevのみNoneチェック
                self.cursol_node.prev.nextNode = self.cursol_node.nextNode
            self.cursol_node.nextNode.prev = self.cursol_node.prev
            self.cursol_node = self.cursol_node.nextNode
    
    def print_nodes_val(self):
        ans_list = []
        target_node = self.end
        while True:
            if target_node.prev == None:break
            else:
                target_node = target_node.prev
                ans_list.append(target_node.val)
        ans_list = ans_list[::-1]
        return ans_list

linkedList = LinkedList()
n = int(input())
for i in range(n):
    q,*x = map(int, input().split())
    x = x[0] if x else None
    if q == 0:
        linkedList.insertBefore(x)
    elif q == 1:
        linkedList.move(x)
    elif q == 2:
        linkedList.erase()
print('\n'.join(map(str,linkedList.print_nodes_val())))