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.
from collections import deque  
n = int(input())
L = []
S = []
for i in range(n):
    u,v = map(int,input().split())
    L.append([u,v])
    S.append([u,v,i])
d = dict()
for i in range(n):
    d[i] = []
S.sort(key = lambda x: x[0])
q = deque()

for j in range(n):
    if L[j][0] == 1:
        ad = L[j][1]
        q.append(ad)
        L[ad][0] -= 1 
        L[ad][1] ^= j 
        d[j].append(ad)
        d[ad].append(j)
while (len(q)!=0):
    x = q.popleft()
    ad = L[x][1]
    
    if L[ad][0] == 2:
        L[ad][0] -= 1 
        L[ad][1] ^= j 
        q.append(ad)
    d[x].append(ad)
    d[ad].append(x)
for c in d.keys():
    u = d[c]
    u = set(u)
    u.discard(c)
    u = list(u)
    
    u.sort()
    d[c] = u 
X = []
for c in d.keys():
    for j in d[c]:
        if j < c:
            X.append([j,c])
print(len(X))
for c in X:
    print(*c)
            
            
            
    
        
                
        
        

    