#include <bits/stdc++.h>
using namespace std;
const long long MXN = 1e6 + 1;
const long long MNN = 1e3 + 1;
const long long MOD = 1e9 + 7;
const long long INF = 1e18;
const long long MAGIC = 1000;
const long double EPS = 1e-9;
const long double PI = 3.1415926536;
const string TIME = "rovno_ushten_push_ketti";
long long lg(long long x) { return 64 - __builtin_clzll(x) - 1; };
long long n;
long long deg[MXN], s[MXN];
set<pair<long long, long long> > res;
queue<long long> q;
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  cin >> n;
  for (long long i = 0; i < n; ++i) {
    cin >> deg[i] >> s[i];
    if (deg[i] == 1) q.push(i);
  }
  while (!q.empty()) {
    long long v = q.front();
    q.pop();
    if (!deg[v]) continue;
    --deg[s[v]];
    s[s[v]] ^= v;
    if (deg[s[v]] == 1) q.push(s[v]);
    if (v || s[v]) res.insert({min(v, s[v]), max(v, s[v])});
  }
  cout << res.size() << '\n';
  for (pair<long long, long long> it : res)
    cout << it.first << ' ' << it.second << '\n';
  return 0;
}
