#include <bits/stdc++.h>
using namespace std;
bool arr[1001][1001];
struct node {
  int ct;
  int lastind;
};
struct node1 {
  int ct;
  int lastind;
};
node row[1001];
node1 col[1001];
int main() {
  vector<int> a;
  int n, i, x, y, j, temp;
  scanf("%d", &n);
  for (i = 0; i < n - 1; i++) {
    scanf("%d%d", &x, &y);
    arr[x][y] = 1;
  }
  for (i = 1; i <= n; i++) {
    row[i].ct = 0;
    row[i].lastind = 0;
    for (j = 1; j <= n; j++) {
      if (arr[i][j]) {
        row[i].ct++;
        row[i].lastind = j;
      }
    }
  }
  for (i = 1; i <= n; i++) {
    temp = i;
    for (j = i + 1; j <= n; j++) {
      if (row[temp].ct > row[j].ct) {
        temp = j;
      } else if (row[temp].ct == row[j].ct &&
                 row[temp].lastind > row[j].lastind)
        temp = j;
    }
    if (temp != i) {
      a.push_back(1);
      a.push_back(i);
      a.push_back(temp);
      swap(row[i], row[temp]);
      for (j = 1; j <= n; j++) {
        swap(arr[i][j], arr[temp][j]);
      }
    }
  }
  for (i = 1; i <= n; i++) {
    col[i].ct = 0;
    col[i].lastind = n;
    for (j = 1; j <= n; j++) {
      if (arr[j][i]) {
        col[i].ct++;
        col[i].lastind = min(col[i].lastind, j);
      }
    }
  }
  for (i = 1; i <= n; i++) {
    temp = i;
    for (j = i + 1; j <= n; j++) {
      if (col[temp].ct < col[j].ct) {
        temp = j;
      } else if (col[temp].ct == col[j].ct &&
                 col[temp].lastind > col[j].lastind)
        temp = j;
    }
    if (temp != i) {
      a.push_back(2);
      a.push_back(i);
      a.push_back(temp);
      swap(col[i], col[temp]);
    }
  }
  printf("%d\n", a.size() / 3);
  for (i = 0; i < a.size(); i += 3) {
    printf("%d %d %d\n", a[i], a[i + 1], a[i + 2]);
  }
  return 0;
}
