#include <bits/stdc++.h>
const double eps = 1e-11;
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
using namespace std;
const int maxn = 1005;
int n;
typedef struct node_ {
  int x, y;
} N;
N node[maxn];
pair<int, pair<int, int> > ans[100005];
int cnt;
void deal(int t, int a, int b) {
  ans[cnt].first = t, ans[cnt].second.first = a, ans[cnt++].second.second = b;
}
int main() {
  while (scanf("%d", &n) == 1) {
    cnt = 0;
    for (int i = (1); i < (n); i++) {
      scanf("%d%d", &node[i].x, &node[i].y);
    }
    for (int i = 1; i < n; i++) {
      int tmp;
      if (node[i].x != i + 1) {
        tmp = node[i].x;
        for (int j = (1); j < (n); j++) {
          if (node[j].x == tmp) {
            node[j].x = i + 1;
          } else if (node[j].x == i + 1) {
            node[j].x = tmp;
          }
        }
        deal(1, tmp, i + 1);
      }
      if (node[i].y > i) {
        tmp = node[i].y;
        for (int j = (1); j < (n); j++) {
          if (node[j].y == tmp) {
            node[j].y = i;
          } else if (node[j].y == i) {
            node[j].y = tmp;
          }
        }
        deal(2, tmp, i);
      }
    }
    printf("%d\n", cnt);
    for (int i = 0; i < cnt; i++) {
      printf("%d %d %d\n", ans[i].first, ans[i].second.first,
             ans[i].second.second);
    }
  }
  return 0;
}
