#include <bits/stdc++.h>
using namespace std;
const int MAXN = 65540;
struct node {
  int num, grades, sumxor;
  node() { num = grades = sumxor = 0; }
} v[MAXN], padre;
queue<node> cola;
struct sp {
  int a, b;
  sp() { a = b = 0; }
} R[MAXN];
int n, pos = 0;
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d %d", &v[i].grades, &v[i].sumxor);
    v[i].num = i;
    if (v[i].grades == 1) cola.push(v[i]);
  }
  while (!cola.empty()) {
    padre = cola.front();
    cola.pop();
    if (v[padre.num].grades != 1) continue;
    R[pos].a = padre.num;
    R[pos].b = padre.sumxor;
    pos++;
    v[padre.num].grades--;
    v[padre.sumxor].grades--;
    v[padre.sumxor].sumxor ^= padre.num;
    if (v[padre.sumxor].grades == 1) cola.push(v[padre.sumxor]);
  }
  printf("%d\n", pos);
  for (int i = 0; i < pos; i++) printf("%d %d\n", R[i].a, R[i].b);
  return 0;
}
