#include <bits/stdc++.h>
using namespace std;
struct node {
  int t, x, y;
  node() {}
  node(int t_, int x_, int y_) {
    t = t_;
    x = x_;
    y = y_;
  }
  void print() { cout << t << " " << x << " " << y << "\n"; }
};
struct line_row {
  int first, second;
  line_row() {
    first = 0;
    second = 0;
  }
  bool operator<(const line_row &other) const {
    if (second != other.second) return second < other.second;
    return first < other.first;
  }
};
struct line_col {
  int first, second;
  line_col() {
    first = 0;
    second = 1e9;
  }
  bool operator<(const line_col &other) const {
    if (second != other.second) return second < other.second;
    return first < other.first;
  }
};
line_row row[1005];
line_col col[1005];
pair<int, int> p[1005];
int n;
int cell[1005][1005];
void print() {
  cout << "\n";
  for (int i = 0; i < n - 1; i++) cell[p[i].first][p[i].second] = 1;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) cout << cell[i][j] << " \n"[j == n - 1];
}
void swap_row(int x, int y) {
  for (int i = 0; i < n - 1; i++)
    if (p[i].first == x)
      p[i].first = y;
    else if (p[i].first == y)
      p[i].first = x;
}
void swap_col(int x, int y) {
  for (int i = 0; i < n - 1; i++)
    if (p[i].second == x)
      p[i].second = y;
    else if (p[i].second == y)
      p[i].second = x;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  vector<node> ans;
  for (int i = 0; i < n - 1; i++) {
    int x, y;
    cin >> p[i].first >> p[i].second;
    p[i].first--, p[i].second--;
    row[p[i].first].first++;
    row[p[i].first].second = max(row[p[i].first].second, p[i].second);
  }
  for (int i = 0; i < n; i++) {
    int mn_idx = i;
    for (int j = i + 1; j < n; j++)
      if (row[j] < row[mn_idx]) mn_idx = j;
    if (mn_idx != i) {
      ans.push_back(node(1, i + 1, mn_idx + 1));
      swap_row(i, mn_idx);
      swap(row[i], row[mn_idx]);
    }
  }
  for (int i = 0; i < n - 1; i++) {
    col[p[i].second].first--;
    col[p[i].second].second = min(col[p[i].second].second, p[i].first);
  }
  for (int i = 0; i < n; i++) {
    int mx_idx = i;
    for (int j = i + 1; j < n; j++)
      if (col[j] < col[mx_idx]) mx_idx = j;
    if (mx_idx != i) {
      ans.push_back(node(2, i + 1, mx_idx + 1));
      swap_col(i, mx_idx);
      swap(col[i], col[mx_idx]);
    }
  }
  cout << ans.size() << "\n";
  for (int i = 0; i < ans.size(); i++) ans[i].print();
  return 0;
}
