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.
import heapq
m = int(input())
s = []

for _ in range(m):
    s.append(input())


def misha_forest():
    h = []
    heapq.heapify(h)

    res = {}
    neighbors_plucked = {}

    for i, line in enumerate(s):
        degree, xor_sum = [int(k) for k in line.split()]
        heapq.heappush(h, [degree, i, xor_sum])
        neighbors_plucked[i] = []

    while len(h) > 0:
        degree, i, xor_sum = heapq.heappop(h)
        if degree == 1:
            a, b = min(i, xor_sum), max(i, xor_sum)
            tup = (a, b)
            res[tup] = True
            neighbors_plucked[xor_sum].append(i)
        elif degree > 1:
            while len(neighbors_plucked[i]):
                xor_sum ^= neighbors_plucked[i].pop()
                degree -= 1
            heapq.heappush(h, [degree, i, xor_sum])

    return [[tup[0], tup[1]] for tup in res]

res = misha_forest()

print(len(res))
for el in res:
    print(str(el[0]) + ' ' + str(el[1]))