#include <bits/stdc++.h>
using namespace std;
int n;
int hor[1005], vert[1005], seq_h[1005], seq_v[1005], where_h[1005],
    where_v[1005];
bool used_h[1005], used_v[1005];
vector<int> on_hor[1005];
vector<pair<int, pair<int, int> > > change;
int main() {
  cin >> n;
  for (int i = 1; i < n; i++) {
    seq_h[i] = i;
    seq_v[i] = i;
    where_h[i] = i;
    where_v[i] = i;
    int x, y;
    cin >> x >> y;
    vert[y]++;
    hor[x]++;
    on_hor[x].push_back(y);
  }
  seq_h[n] = n;
  seq_v[n] = n;
  where_h[n] = n;
  where_v[n] = n;
  for (int i = n; i >= 2; i--) {
    if (vert[seq_v[i]]) {
      for (int j = 1; j <= n; j++) {
        if (!used_v[j] && !vert[j]) {
          int el = seq_v[i];
          int p = where_v[j];
          where_v[el] = p;
          where_v[j] = i;
          change.push_back(make_pair(2, make_pair(i, p)));
          swap(seq_v[i], seq_v[p]);
          break;
        }
      }
    }
    used_v[seq_v[i]] = true;
    if (!hor[seq_h[i]]) {
      for (int j = 1; j <= n; j++) {
        if (!used_h[j] && hor[j]) {
          int el = seq_h[i];
          int p = where_h[j];
          where_h[el] = p;
          where_h[j] = i;
          change.push_back(make_pair(1, make_pair(i, p)));
          swap(seq_h[i], seq_h[p]);
          break;
        }
      }
    }
    for (int q = 0; q < on_hor[seq_h[i]].size(); q++) {
      vert[on_hor[seq_h[i]][q]]--;
    }
    used_h[seq_h[i]] = true;
  }
  cout << change.size() << endl;
  for (int i = 0; i < change.size(); i++) {
    cout << change[i].first << " " << change[i].second.first << " "
         << change[i].second.second << endl;
  }
}
