#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > ones;
vector<pair<int, pair<int, int> > > anss;
int got[1005];
int n;
void solve(int x) {
  if (x == 1) return;
  int i, j;
  memset(got, 0, sizeof got);
  for (i = 0; i < ones.size(); i++) {
    if (ones[i].first < x && ones[i].second < x) {
      got[ones[i].second] = 1;
    }
  }
  for (i = 0; i < x; i++) {
    if (!got[i] && i != x - 1) {
      anss.push_back({2, {i + 1, x}});
      for (j = 0; j < ones.size(); j++) {
        if (ones[j].second == i)
          ones[j].second = x - 1;
        else if (ones[j].second == x - 1)
          ones[j].second = i;
      }
      break;
    }
  }
  memset(got, 0, sizeof got);
  int maxi = 0;
  for (i = 0; i < ones.size(); i++) {
    if (ones[i].first < x && ones[i].second < x) {
      got[ones[i].first]++;
      maxi = max(maxi, got[ones[i].first]);
    }
  }
  for (i = 0; i < x; i++) {
    if (got[i] >= maxi && i != x - 1) {
      anss.push_back({1, {i + 1, x}});
      for (j = 0; j < ones.size(); j++) {
        if (ones[j].first == i)
          ones[j].first = x - 1;
        else if (ones[j].first == x - 1)
          ones[j].first = i;
      }
      break;
    }
  }
  solve(x - 1);
}
int main() {
  cin >> n;
  int i;
  for (i = 0; i < n - 1; i++) {
    int x, y;
    cin >> x >> y;
    x--;
    y--;
    ones.push_back({x, y});
  }
  solve(n);
  cout << anss.size() << endl;
  for (i = 0; i < anss.size(); i++)
    cout << anss[i].first << " " << anss[i].second.first << " "
         << anss[i].second.second << endl;
}
