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())
input_list = []
edge_list = {}
for i in range(n):
    k, l = [int(x) for x in input().rstrip().split(' ')]
    input_list.append((i, k, l))
    edge_list[i] = []

input_list = sorted(input_list, key=lambda t: t[1])

num_of_edges = 0
for i in range(n):
    #print(input_list[i])
    index, degree, s = input_list[i]
    if degree == len(edge_list[index]):
        continue
    if degree == (len(edge_list[index])+1):
        x = 0
        for k in edge_list[index]:
            x = x^k
        new_edge_to = x^s
        edge_list[index].append(new_edge_to)
        edge_list[new_edge_to].append(index)
        num_of_edges += 1
        
    else:
        raise Exception('Something bad happened')
    #print(edge_list)

print(num_of_edges)
for i in range(n):
    for j in edge_list[i]:
        if i>j:
            print(i, j)
