#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  int dados[n][3];
  int inicios[n];
  int finais[n];
  int listas = 0;
  for (int i = 0; i < n; i++) {
    cin >> dados[i][0];
    cin >> dados[i][2];
    dados[i][1] = i + 1;
    if (dados[i][0] == 0) {
      inicios[listas] = i;
      listas++;
    }
  }
  int atual, atualProximo;
  for (int i = 0; i < listas; i++) {
    atual = inicios[i];
    while (dados[atual][2] != 0) {
      atualProximo = dados[atual][2] - 1;
      atual = atualProximo;
    }
    finais[i] = atual;
  }
  for (int i = 0; i < listas - 1; i++) {
    dados[finais[i]][2] = inicios[i + 1] + 1;
    dados[inicios[i + 1]][0] = finais[i] + 1;
  }
  for (int i = 0; i < n; i++) {
    cout << dados[i][0] << " " << dados[i][2] << endl;
  }
}
