#include <bits/stdc++.h>
using namespace std;
int N;
int grid[1001][1001];
int rowId[1001], colId[1001], revRowId[1001], revColId[1001];
vector<pair<int, int> > minAcceptableRow, maxAcceptableCol;
bool cmp(pair<int, int> A, pair<int, int> B) {
  if (A.first == B.first) return A.second > B.second;
  return A.first < B.first;
}
int main() {
  cin >> N;
  for (int i = 1; i <= N - 1; i++) {
    int x, y;
    cin >> x >> y;
    grid[x][y] = 1;
  }
  for (int i = 1; i <= N; i++) {
    int rowOnes = 0, colOnes = 0;
    rowId[i] = i;
    colId[i] = i;
    revRowId[i] = i;
    revColId[i] = i;
    for (int j = 1; j <= N; j++) {
      if (grid[i][j] == 1) rowOnes++;
      if (grid[j][i] == 1) colOnes++;
    }
    maxAcceptableCol.push_back({N - colOnes, i});
    minAcceptableRow.push_back({rowOnes + 1, i});
  }
  sort(minAcceptableRow.rbegin(), minAcceptableRow.rend());
  vector<pair<int, pair<int, int> > > ans;
  for (int i = 1; i <= N; i++) {
    int rowTurn = minAcceptableRow[i - 1].second;
    int sendTo = N + 1 - i;
    int sendFrom = rowId[rowTurn];
    if (sendFrom != sendTo) ans.push_back({1, {sendFrom, sendTo}});
    rowId[rowTurn] = sendTo;
    rowId[revRowId[sendTo]] = sendFrom;
    revRowId[sendFrom] = revRowId[sendTo];
    revRowId[sendTo] = rowTurn;
  }
  for (int i = 1; i <= N; i++) {
    int asliIdx = revRowId[i];
    for (int j = 1; j <= N; j++) {
      if (grid[asliIdx][j] == 1) {
        int curr = maxAcceptableCol[j - 1].first;
        int updated = min(curr, i - 1);
        maxAcceptableCol[j - 1] = {updated, j};
      }
    }
  }
  sort(maxAcceptableCol.begin(), maxAcceptableCol.end(), cmp);
  for (int i = 1; i <= N; i++) {
    int colTurn = maxAcceptableCol[i - 1].second;
    int sendTo = i;
    int sendFrom = colId[colTurn];
    if (sendFrom != sendTo) ans.push_back({2, {sendFrom, sendTo}});
    colId[colTurn] = sendTo;
    colId[revColId[sendTo]] = sendFrom;
    revColId[sendFrom] = revColId[sendTo];
    revColId[sendTo] = colTurn;
  }
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) {
    cout << ans[i].first << " " << ans[i].second.first << " "
         << ans[i].second.second << endl;
  }
  return 0;
}
