#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int n, a[1111][1111], x, y, rows[1111], rr[111111][4], ans, mn, mi, cols[1111],
    last[1111], kk, mx;
int main() {
  scanf("%d", &n);
  memset(a, 0, sizeof(a));
  memset(rows, 0, sizeof(rows));
  memset(cols, 0, sizeof(cols));
  for (int i = 1; i < n; ++i) {
    scanf("%d%d", &x, &y);
    a[--x][--y] = 1;
    ++rows[x];
    ++cols[y];
  }
  ans = 0;
  kk = n - 1;
  for (int i = 0; i < kk; ++i) {
    mn = 1111;
    mi = -1;
    for (int j = 0; j < n; ++j)
      if (rows[j] < mn) mn = rows[mi = j];
    if (i != mi) {
      rr[ans][0] = 1;
      rr[ans][1] = i + 1;
      rr[ans++][2] = mi + 1;
      for (int j = 0; j < n; ++j) swap(a[i][j], a[mi][j]);
      swap(rows[i], rows[mi]);
    }
    rows[i] = INF;
  }
  memset(last, -1, sizeof(last));
  for (int j = 0; j < n; ++j)
    for (int i = 0; i < n; ++i)
      if (a[i][j]) {
        last[j] = i;
        break;
      }
  for (int i = 0; i < kk; ++i) {
    mn = -1111;
    mi = -1;
    mx = 1111;
    for (int j = 0; j < n; ++j)
      if (cols[j] > mn || cols[j] == mn && last[j] <= mx) {
        mn = cols[mi = j];
        mx = last[j];
      }
    if (i != mi) {
      rr[ans][0] = 2;
      rr[ans][1] = i + 1;
      rr[ans++][2] = mi + 1;
      for (int j = 0; j < n; ++j) swap(a[j][i], a[j][mi]);
      swap(cols[i], cols[mi]);
      swap(last[i], last[mi]);
    }
    cols[i] = -INF;
  }
  printf("%d\n", ans);
  for (int i = 0; i < ans; ++i)
    printf("%d %d %d\n", rr[i][0], rr[i][1], rr[i][2]);
  return 0;
}
