#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;   }   