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 sys

n = int(input())
degs = [None]*n
xors = [None]*n
degsdict = {}
for i, l in enumerate(sys.stdin.read().splitlines()[:n]):

    d, xors[i] = map(int, l.split())

    degs[i] = d   
 
    if not d in degsdict:
        degsdict[d] = set()
    
    degsdict[d].add(i)

edges = []

while degsdict[1]:

    v = degsdict[1].pop()
    n = xors[v]

    edges.append([v, n])

    ndeg = degs[n]
    degsdict[ndeg].remove(n)

    ndeg -= 1
    if not ndeg in degsdict:
        degsdict[ndeg] = set()

    degsdict[ndeg].add(n)
    degs[n] -= 1

print(len(edges))
print("\n".join([" ".join(map(str, i)) for i in edges]))

