#include <bits/stdc++.h>
using namespace std;
int n;
vector<vector<int>> a, base, p;
inline void f(int type, int l, int r) {
  if (type == 1) {
    swap(a[l], a[r]);
  } else if (type == 2) {
    for (int i = 0; i < n; i++) {
      swap(a[i][l], a[i][r]);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int _ = 1;
  int cnt = 1;
  while (_--) {
    cin >> n;
    a.assign(n, vector<int>(n, 0));
    vector<int> hor(n);
    for (int i = 0; i < n - 1; i++) {
      int x, y;
      cin >> x >> y;
      x--;
      y--;
      hor[y]++;
      a[x][y] = 1;
    }
    vector<vector<int>> ans;
    for (int i = 0; i < n - 1; i++) {
      int mx = 0;
      int it = -1;
      for (int j = i; j < n; j++) {
        if (hor[j] > mx) {
          mx = hor[j];
          it = j;
        }
      }
      if (it == -1) {
        break;
      }
      if (it == i) {
        continue;
      }
      ans.push_back({2, i + 1, it + 1});
      f(2, i, it);
      swap(hor[i], hor[it]);
    }
    int it = n - 1;
    for (int j = n - 2; j >= 0; j--) {
      set<int> s;
      for (int i = 0; i < n; i++) {
        if (a[i][j]) {
          s.insert(i);
        }
      }
      if (!s.size()) {
        continue;
      }
      while (!s.empty() && *s.begin() <= it) {
        if (a[it][j]) {
          it--;
          continue;
        }
        ans.push_back({1, *s.begin() + 1, it + 1});
        f(1, *s.begin(), it);
        s.erase(s.begin());
        it--;
      }
    }
    cout << ans.size() << endl;
    for (int i = 0; i < ans.size(); i++) {
      for (int j : ans[i]) {
        cout << j << " ";
      }
      cout << endl;
    }
  }
}
