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=int(input())
w=[]
eta=[]
for j in range(n):
    w.append([int(k) for k in input().split()])
for j in range(n):
    if w[j][0]==1:
        eta.append([j, w[j][1]])
        w[w[j][1]][1]=w[w[j][1]][1]^j
        w[w[j][1]][0]-=1
        w[j][0]=0
        w[j][1]=0
        iota=w[j][1]
        while w[iota][0]==1:
            eta.append([iota, w[iota][1]])
            w[w[iota][1]][1]=w[w[iota][1]][1]^iota
            w[w[iota][1]][0]-=1
            w[iota][0]=0
            w[iota][1]=0
            iota=w[iota][1]
print(len(eta))
for j in eta:
    print(" ".join([str(k) for k in j]))