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())
d = []
v = []
for i in range(n):
    (a, b) = map(int, input().split())
    v.append([a, b, i])

g = dict()
g[0] = set()
g[1] = set()
for i in v:
    if i[0] in g:
        g[i[0]].add(i[2])
    else:
        g[i[0]] = set()
        g[i[0]].add(i[2])

ans = []

while len(g[1]) > 0:
    i = 0
    for x in g[1]:
        i = x
        break
    a = v[i][2]
    b = v[i][1]

    g[v[a][0]].discard(v[a][2])
    g[v[a][0]-1].add(v[a][2])
    v[a][0] -= 1

    g[v[b][0]].discard(v[b][2])
    g[v[b][0]-1].add(v[b][2])
    v[b][0] -= 1

    v[b][1] ^= a
    ans.append((a, b))



print(len(ans))
for i in ans:
    print(*i)

'''
9
2 5
4 3
7 6
8 3
5 0
6 1
3 9
1 0
9 0
'''