#include <bits/stdc++.h>
using namespace std;
const int maxt = 100, maxn = 200002;
int n, k, l, a[maxn];
vector<int> g[maxn];
bool mark[maxn];
deque<pair<int, int> > q;
void input();
void solve();
void output();
void dfs(int v);
int main() {
  input();
  solve();
  output();
  return 0;
}
void input() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> k >> l;
    q.push_back({k - 1, l - 1});
    g[k - 1].push_back(l - 1);
    g[l - 1].push_back(k - 1);
  }
}
void solve() {
  for (int i = 0; i < 2 * n; i++) {
    if (i % 2 == 0) {
      g[i].push_back(i + 1);
      g[i + 1].push_back(i);
    }
  }
  for (int i = 0; i < 2 * n; i++) {
    if (!mark[i]) {
      dfs(i);
    }
  }
}
void output() {
  for (int i = 0; i < n; i++) {
    cout << a[q[i].first] + 1 << " " << a[q[i].second] + 1 << endl;
  }
}
void dfs(int v) {
  mark[v] = 1;
  for (auto i : g[v]) {
    if (!mark[i]) {
      a[i] = !a[v];
      dfs(i);
    }
  }
}
