#include <bits/stdc++.h>
using namespace std;
char data[1000][1000];
char temp[1000];
int cx[1000];
int cy[1000];
int n;
vector<int> c1;
vector<int> c2;
vector<int> t;
void swap_x(int i, int max_id) {
  for (int j = 0; j < n; j++) {
    temp[j] = data[j][i];
  }
  for (int j = 0; j < n; j++) {
    data[j][i] = data[j][max_id];
  }
  for (int j = 0; j < n; j++) {
    data[j][max_id] = temp[j];
  }
  c1.push_back(i);
  c2.push_back(max_id);
  t.push_back(2);
}
void swap_y(int i, int id) {
  for (int j = 0; j < n; j++) {
    temp[j] = data[i][j];
  }
  for (int j = 0; j < n; j++) {
    data[i][j] = data[id][j];
  }
  for (int j = 0; j < n; j++) {
    data[id][j] = temp[j];
  }
  c1.push_back(i);
  c2.push_back(id);
  t.push_back(1);
}
int main() {
  cin >> n;
  for (int i = 0; i < n - 1; i++) {
    int a1, a2;
    cin >> a1 >> a2;
    data[a1 - 1][a2 - 1] = 1;
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (data[i][j]) {
        cx[j]++;
      }
    }
  }
  for (int i = 0; i < n - 1; i++) {
    int max = cx[i];
    int max_id = i;
    for (int j = i + 1; j < n; j++) {
      if (cx[j] > max) {
        max = cx[j];
        max_id = j;
      }
    }
    if (max_id != i) {
      swap_x(i, max_id);
      int temp;
      temp = cx[i];
      cx[i] = cx[max_id];
      cx[max_id] = temp;
    }
  }
  for (int i = 0; i < n; i++) {
    int j;
    for (j = n - 1; j >= 0; j--) {
      if (data[i][j]) {
        break;
      }
    }
    cy[i] = j;
  }
  for (int i = 0; i < n - 1; i++) {
    int min = cy[i];
    int min_id = i;
    for (int j = i + 1; j < n; j++) {
      if (cy[j] < min) {
        min = cy[j];
        min_id = j;
      }
    }
    if (min_id != i) {
      swap_y(i, min_id);
      int temp;
      temp = cy[i];
      cy[i] = cy[min_id];
      cy[min_id] = temp;
    }
  }
  int nnn = t.size();
  cout << nnn << endl;
  for (int i = 0; i < nnn; i++) {
    printf("%d %d %d\n", t[i], c1[i] + 1, c2[i] + 1);
  }
  return 0;
}
