Let's define a forest as a non-directed acyclic graph (also without loops and parallel edges). One day Misha played with the forest consisting of *n* vertices. For each vertex *v* from 0 to *n* - 1 he wrote down two integers, *degree*<sub class="lower-index">*v*</sub> and *s*<sub class="lower-index">*v*</sub>, were the first integer is the number of vertices adjacent to vertex *v*, and the second integer is the XOR sum of the numbers of vertices adjacent to *v* (if there were no adjacent vertices, he wrote down 0). 

Next day Misha couldn't remember what graph he initially had. Misha has values *degree*<sub class="lower-index">*v*</sub> and *s*<sub class="lower-index">*v*</sub> left, though. Help him find the number of edges and the edges of the initial graph. It is guaranteed that there exists a forest that corresponds to the numbers written by Misha.
The first line contains integer *n* (1 ≤ *n* ≤ 2<sup class="upper-index">16</sup>), the number of vertices in the graph.

The *i*-th of the next lines contains numbers *degree*<sub class="lower-index">*i*</sub> and *s*<sub class="lower-index">*i*</sub> (0 ≤ *degree*<sub class="lower-index">*i*</sub> ≤ *n* - 1, 0 ≤ *s*<sub class="lower-index">*i*</sub> &lt; 2<sup class="upper-index">16</sup>), separated by a space.

n_vertices = int(input())
n_edges = 0
stack_leafs = []
ans = []
arr_s = []
arr_deg = []
for i in range(n_vertices):
    deg, s = map(int, input().split())
    arr_deg.append(deg)
    arr_s.append(s)
    n_edges += deg
    if arr_deg[i] == 1:
        stack_leafs.append(i)
        # your code may be here

n_edges //= 2
while stack_leafs:
    i = stack_leafs.pop()  # 1 0
    p = arr_s[i]  # vertex, which connects with leaf | 0
    if arr_deg[i]>0:
        ans.append((i, p))  # [(1, 0)]
    #print("Added", i, p)
    arr_s[p] ^= i
    arr_deg[p] -= 1
    arr_deg[i] -= 1
    if arr_deg[p] and arr_deg[i] > 1:
        stack_leafs.append(p)
print(n_edges)
for i in ans:
    print(*i)
