#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000;
int n;
vector<pair<int, int> > colswaps;
vector<pair<int, int> > rowswaps;
vector<int> h[maxn];
int perm[maxn];
int mxrow[maxn];
int cmp(int i, int j) { return ((int)(h[i]).size()) < ((int)(h[j]).size()); }
int cmp2(int i, int j) { return mxrow[i] < mxrow[j]; }
void msort(int* p, vector<pair<int, int> >& swaps, int (*cmp)(int, int)) {
  static int pos[maxn];
  static int arr[maxn];
  for (int i = 0; i < n; i++) {
    p[i] = i;
    pos[i] = i;
    arr[i] = i;
  }
  sort(p, p + n, cmp);
  for (int i = 0; i < n; i++) {
    if (arr[i] == p[i]) continue;
    swaps.push_back(make_pair(pos[arr[i]], pos[p[i]]));
    swap(pos[arr[i]], pos[p[i]]);
    swap(arr[i], arr[pos[arr[i]]]);
  }
}
int main() {
  int x, y;
  scanf("%d", &n);
  for (int i = 0; i < n - 1; i++) {
    scanf("%d%d", &x, &y);
    x--, y--;
    h[x].push_back(y);
  }
  msort(perm, rowswaps, cmp);
  for (int i = 0; i < ((int)(rowswaps).size()); i++)
    swap(h[rowswaps[i].first], h[rowswaps[i].second]);
  for (int i = 0; i < n; i++) mxrow[i] = n;
  for (int i = n - 1; i >= 0; i--)
    for (int j = 0; j < ((int)(h[i]).size()); j++) mxrow[h[i][j]] = i;
  msort(perm, colswaps, cmp2);
  printf("%d\n", ((int)(colswaps).size()) + ((int)(rowswaps).size()));
  for (int i = 0; i < ((int)(rowswaps).size()); i++)
    printf("1 %d %d\n", rowswaps[i].first + 1, rowswaps[i].second + 1);
  for (int i = 0; i < ((int)(colswaps).size()); i++)
    printf("2 %d %d\n", colswaps[i].first + 1, colswaps[i].second + 1);
  return 0;
}
