#include <bits/stdc++.h>
using namespace std;
const long double eps = 1e-12;
const long double pi = acos(-1.0);
const int inf = 1e+9;
#pragma comment(linker, "/STACK:36777216")
long long gcd(long long a, long long b) { return (b == 0) ? a : gcd(b, a % b); }
int xabs(int a) { return a >= 0 ? a : -a; }
int main() {
  int n;
  cin >> n;
  vector<vector<int> > a(n, vector<int>(n, 0));
  set<pair<int, int> > sp;
  for (int i = 0; i < n - 1; i++) {
    int b, c;
    cin >> b >> c;
    b--;
    c--;
    a[b][c] = 1;
  }
  vector<int> scol(n, 0);
  for (int i = 0; i < n; i++) {
    int s = 0;
    for (int k = 0; k < n; k++) {
      s += a[i][k];
    }
    sp.insert(make_pair(s, i));
    scol[i] = s;
  }
  int last = n - 1;
  vector<vector<int> > ans;
  while (!sp.empty()) {
    set<pair<int, int> >::iterator it = sp.end();
    it--;
    int sum = (*it).first;
    int id = (*it).second;
    if (sum == 0) {
      sp.erase(it);
      continue;
    }
    if (id > last) {
      sp.erase(it);
      continue;
    }
    if (id < last && scol[last] < sum) {
      sp.erase(make_pair(scol[last], last));
      sp.insert(make_pair(scol[last], id));
      vector<int> tmp(3);
      tmp[0] = 1;
      tmp[1] = last + 1;
      tmp[2] = id + 1;
      ans.push_back(tmp);
      swap(a[last], a[id]);
      swap(scol[last], scol[id]);
      sp.erase(it);
    }
    if (id == last) sp.erase(it);
    last--;
  }
  scol.assign(n, 0);
  for (int k = 0; k < n; k++) {
    int s = n;
    for (int i = 0; i < n; i++) {
      if (a[i][k] == 1) {
        scol[k] = s;
        break;
      }
      s--;
    }
    sp.insert(make_pair(s, k));
  }
  last = 0;
  while (!sp.empty()) {
    set<pair<int, int> >::iterator it = sp.end();
    it--;
    int sum = (*it).first;
    int id = (*it).second;
    if (id < last) {
      sp.erase(it);
      continue;
    }
    if (sum == 0) {
      sp.erase(it);
      continue;
    }
    if (id > last && scol[last] < sum) {
      sp.erase(make_pair(scol[last], last));
      sp.insert(make_pair(scol[last], id));
      vector<int> tmp(3);
      tmp[0] = 2;
      tmp[1] = last + 1;
      tmp[2] = id + 1;
      ans.push_back(tmp);
      swap(scol[last], scol[id]);
      sp.erase(it);
    }
    if (id == last) sp.erase(it);
    last++;
  }
  int m = ans.size();
  cout << m << endl;
  for (int i = 0; i < m; i++) {
    cout << ans[i][0] << " " << ans[i][1] << " " << ans[i][2] << endl;
  }
  return 0;
}
