#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 6;
const int M = 10005;
int a[N][N];
struct node {
  int id, x, y;
  node() {}
  node(int id, int x, int y) : id(id), x(x), y(y) {}
};
vector<node> ans;
int rcnt[N], ccnt[N];
void solve(int n) {
  if (n == 1) return;
  int key = n + 1;
  for (int i = 1; i <= n; i++) {
    if (ccnt[i] == 0) {
      key = i;
      break;
    }
  }
  if (key < n) {
    ans.push_back(node(2, key, n));
    swap(ccnt[key], ccnt[n]);
    for (int i = 1; i <= n; i++) swap(a[i][key], a[i][n]);
  }
  key = n + 1;
  for (int i = 1; i <= n; i++) {
    if (rcnt[i]) {
      key = i;
      break;
    }
  }
  if (key < n) {
    ans.push_back(node(1, key, n));
    swap(rcnt[key], rcnt[n]);
    for (int i = 1; i <= n; i++) swap(a[key][i], a[n][i]);
    for (int i = 1; i <= n; i++) ccnt[i] -= a[n][i];
  }
  solve(n - 1);
}
int main() {
  int n;
  while (cin >> n) {
    memset(rcnt, 0, sizeof(rcnt));
    memset(ccnt, 0, sizeof(ccnt));
    memset(a, 0, sizeof(a));
    for (int i = 1; i <= n - 1; i++) {
      int x, y;
      scanf("%d%d", &x, &y);
      rcnt[x]++;
      ccnt[y]++;
      a[x][y] = 1;
    }
    ans.clear();
    solve(n);
    int m = ans.size();
    printf("%d\n", m);
    for (int i = 0; i < m; i++)
      printf("%d %d %d\n", ans[i].id, ans[i].x, ans[i].y);
  }
  return 0;
}
