#include <bits/stdc++.h>
using namespace std;
int n, m;
struct gra {
  int G[1006][1006], tr;
  vector<pair<int, int> > opt;
  void con(int u, int v) { G[u][v] = G[v][u] = 1; }
  void cut(int u, int v) { G[u][v] = G[v][u] = 0; }
  void doit(int u, int v) {
    int x = 0, y = 0;
    for (int i = (1), iend = (n); i <= iend; ++i)
      if (G[u][i] && G[v][i]) {
        if (!x)
          x = i;
        else
          y = i;
      }
    cut(u, v);
    con(x, y);
    if (tr)
      opt.emplace_back(x, y);
    else
      opt.emplace_back(u, v);
  }
  void wkr() {
    for (int i = (1), iend = (n); i <= iend; ++i) con(i, i % n + 1);
    for (int i = (2), iend = (n); i <= iend; ++i)
      while (!G[i][1]) {
        int l = i, r = i;
        while (!G[l][1]) l = (l - 2 + n) % n + 1;
        while (!G[r][1]) r = r % n + 1;
        doit(l, r);
      }
  }
} A[2];
void solve() {
  cin >> n;
  A[1].tr = 1;
  for (int i = (1), iend = (n - 3); i <= iend; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    A[0].con(u, v);
  }
  for (int i = (1), iend = (n - 3); i <= iend; ++i) {
    int u, v;
    scanf("%d%d", &u, &v);
    A[1].con(u, v);
  }
  A[0].wkr(), A[1].wkr();
  int s = A[0].opt.size() + A[1].opt.size();
  cout << s << endl;
  for (auto t : A[0].opt) printf("%d %d\n", t.first, t.second);
  reverse((A[1].opt).begin(), (A[1].opt).end());
  for (auto t : A[1].opt) printf("%d %d\n", t.first, t.second);
}
signed main() { solve(); }
