#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
struct node {
  int f, s;
};
int n;
bool e[N][N];
node merge(int a, int b, bool odd) {
  int px = -1, py;
  for (int i = 0; i < n; ++i) {
    if (e[a][i] && e[b][i]) {
      if (px == -1)
        px = i;
      else
        py = i;
    }
  }
  e[a][b] = e[b][a] = false;
  e[px][py] = e[py][px] = true;
  node tp1 = {px, py}, tp2 = {a, b};
  return odd ? tp1 : tp2;
}
vector<node> solve(bool inv) {
  memset(e, 0, sizeof(e));
  for (int i = 0, x, y; i < n - 3; ++i) {
    scanf("%d%d", &x, &y);
    --x, --y;
    e[x][y] = e[y][x] = true;
  }
  for (int i = 0; i < n; ++i) e[i][(i + 1) % n] = e[(i + 1) % n][i] = true;
  vector<node> res;
  for (int i = 1; i < n;) {
    if (e[0][i]) {
      ++i;
      continue;
    }
    int j;
    for (j = i + 1; !e[0][j]; ++j)
      ;
    res.push_back(merge(i - 1, j, inv));
  }
  return res;
}
int main() {
  scanf("%d", &n);
  vector<node> a = solve(false), b = solve(true);
  printf("%d\n", a.size() + b.size());
  for (int i = 0; i < a.size(); ++i) printf("%d %d\n", a[i].f + 1, a[i].s + 1);
  for (int i = b.size() - 1; i >= 0; --i)
    printf("%d %d\n", b[i].f + 1, b[i].s + 1);
  return 0;
}
