#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int x;
  scanf("%d", &x);
  return x;
}
const int maxn = 100000 + 5;
int n, num[maxn * 2];
vector<int> G[maxn * 2];
pair<int, int> a[maxn];
void input() {
  n = in();
  for (int i = 1; i <= n; i++) {
    int u = 2 * i, v = u + 1;
    G[u].push_back(v);
    G[v].push_back(u);
  }
  for (int i = 1; i <= n; i++) {
    int x = in();
    int y = in();
    a[i] = make_pair(x, y);
    G[x].push_back(y);
    G[y].push_back(x);
  }
}
bool bipartite(int u) {
  for (int i = 0; i < G[u].size(); i++) {
    int v = G[u][i];
    if (num[u] == num[v]) return false;
    if (!num[v]) {
      num[v] = 3 - num[u];
      if (!bipartite(v)) return false;
    }
  }
  return true;
}
void solve() {
  int tot = 2 * n;
  for (int i = 1; i <= tot; i++) {
    if (!num[i]) {
      num[i] = 1;
      bipartite(i);
    }
  }
}
void output() {
  for (int i = 1; i <= n; i++) {
    cout << num[a[i].first] << ' ' << num[a[i].second] << endl;
  }
}
int main() {
  input();
  solve();
  output();
  return 0;
}
