#include <bits/stdc++.h>
using namespace std;
struct polygon {
  int n;
  vector<vector<int> > sus;
  polygon(int sz) {
    n = sz;
    sus.resize(n, vector<int>(n, 0));
    for (int i = 0; i < n; i++) {
      sus[i][(i + 1) % n] = 1;
      sus[(i + 1) % n][i] = 1;
    }
  }
  void read() {
    for (int i = 0; i < n - 3; i++) {
      int a, b;
      scanf("%d %d", &a, &b);
      a--;
      b--;
      sus[a][b] = 1;
      sus[b][a] = 1;
    }
  }
  vector<pair<pair<int, int>, pair<int, int> > > canonnize() {
    vector<pair<pair<int, int>, pair<int, int> > > res;
    while (1) {
      bool good = 1;
      int prvy = -1, druhy = -1;
      for (int i = 1; i < n; i++) {
        if (!sus[0][i]) {
          good = 0;
          prvy = i - 1;
          for (int j = i + 1; j < n; j++) {
            if (sus[0][j]) {
              druhy = j;
              break;
            }
          }
          break;
        }
      }
      if (good) break;
      int treti;
      for (int i = druhy - 1; i > prvy; i--) {
        if (sus[prvy][i]) {
          treti = i;
          break;
        }
      }
      res.push_back(pair<pair<int, int>, pair<int, int> >(
          pair<int, int>(prvy, druhy), pair<int, int>(0, treti)));
      sus[0][treti] = 1;
      sus[treti][0] = 1;
      sus[druhy][prvy] = 0;
      sus[prvy][druhy] = 0;
    }
    return res;
  }
};
int main() {
  int n;
  scanf("%d", &n);
  polygon st(n), goal(n);
  st.read();
  goal.read();
  vector<pair<pair<int, int>, pair<int, int> > > first_part = st.canonnize(),
                                                 second_part = goal.canonnize();
  int k = first_part.size() + second_part.size();
  printf("%d\n", k);
  for (int i = 0; i < first_part.size(); i++) {
    printf("%d %d\n", first_part[i].first.first + 1,
           first_part[i].first.second + 1);
  }
  for (int i = second_part.size() - 1; i >= 0; i--) {
    printf("%d %d\n", second_part[i].second.first + 1,
           second_part[i].second.second + 1);
  }
  return 0;
}
