func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long MAX = 1e3 + 20;   long long inf = (long long)1e15;   long long mod = (long long)1e9 + 7;   long long n, cntr[MAX], cntc[MAX], l[MAX][MAX], used[MAX];   void swpr(long long ind1, long long ind2) {     swap(cntr[ind1], cntr[ind2]);     for (int i = 1; i <= n; i++) swap(l[ind1][i], l[ind2][i]);   }   void swpc(long long ind1, long long ind2) {     swap(cntc[ind1], cntc[ind2]);     for (int i = 1; i <= n; i++) swap(l[i][ind1], l[i][ind2]);   }   void solve() {     cin >> n;     for (int i = 0; i < n - 1; i++) {       long long x, y;       cin >> x >> y;       l[x][y] = 1;       cntr[x]++;       cntc[y]++;     }     vector<pair<long long, pair<long long, long long>>> ans;     long long need = 0;     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= n; j++) {         if (cntr[j] == need && !used[j]) {           used[i] = 1;           need = 0;           if (i != j) {             swpr(i, j);             ans.push_back({1, {i, j}});           }           break;         }       }       need++;     }     for (int i = 2; i <= n; i++) {       long long start = (i - 1) - cntr[i] + 1;       long long bord = start;       while (bord <= n) {         if (l[i][bord] == 1) {           if (bord != start) {             swpc(start, bord);             ans.push_back({2, {start, bord}});           }           start++;         }         bord++;       }     }     cout << ans.size() <<   n ;     for (int i = 0; i < ans.size(); i++) {       cout << ans[i].first <<     << ans[i].second.first <<                << ans[i].second.second <<   n ;     }   }   int main() {     mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());     ios::sync_with_stdio(0);     long long q;     q = 1;     while (q--) solve();     return 0;   }   