#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > sol;
struct elem {
  int n;
  vector<int> id;
  vector<pair<int, int> > ini, fin;
};
void normalizar(pair<int, int> &p) {
  if (p.first > p.second) swap(p.first, p.second);
}
void normalizar(elem &e) {
  for (int i = 0; i < e.n - 3; i++) {
    normalizar(e.ini[i]);
    normalizar(e.fin[i]);
  }
}
int distancia(pair<int, int> p, int n) {
  return max(p.first + 1 + n - p.second + 1, p.second - p.first + 1);
}
void desplazar(int &x, int d, int n) {
  x += d;
  if (x >= n) x -= n;
}
void desplazar(elem &e, int d) {
  vector<int> nextid(e.n);
  for (int i = 0; i < e.n; i++) nextid[(i + d) % e.n] = e.id[i];
  for (int i = 0; i < e.n; i++) e.id[i] = nextid[i];
  for (int i = 0; i < e.n - 3; i++) {
    desplazar(e.ini[i].first, d, e.n);
    desplazar(e.ini[i].second, d, e.n);
    desplazar(e.fin[i].first, d, e.n);
    desplazar(e.fin[i].second, d, e.n);
  }
}
int med;
bool cruza(pair<int, int> p, int n) {
  return p.first < med and med < p.second and p.second < n - 1;
}
int valor(pair<int, int> p) { return med - p.first + p.second - med; }
bool compara(pair<int, int> p1, pair<int, int> p2) {
  return valor(p1) < valor(p2);
}
int nuevo(pair<int, int> p1, pair<int, int> p2) {
  if (p2.first != p1.first and p2.first != p1.second) return p2.first;
  return p2.second;
}
void genera(elem e) {
  if (e.n == 3) return;
  normalizar(e);
  pair<int, int> mejor = e.fin[0];
  for (int i = 1; i < e.n - 3; i++)
    if (distancia(e.fin[i], e.n) < distancia(mejor, e.n)) mejor = e.fin[i];
  int d = e.n - 1 - mejor.second;
  med = mejor.first + d;
  desplazar(e, d);
  normalizar(e);
  elem nexte;
  nexte.n = e.n;
  nexte.id = e.id;
  nexte.fin = e.fin;
  vector<pair<int, int> > lista;
  for (int i = 0; i < e.n - 3; i++) {
    if (cruza(e.ini[i], e.n))
      lista.push_back(e.ini[i]);
    else
      nexte.ini.push_back(e.ini[i]);
  }
  sort(lista.begin(), lista.end(), compara);
  for (int i = 0; i < int(lista.size()); i++) {
    sol.push_back(pair<int, int>(e.id[lista[i].first], e.id[lista[i].second]));
    if (i > 0)
      nexte.ini.push_back(pair<int, int>(med, nuevo(lista[i - 1], lista[i])));
  }
  if (int(lista.size())) nexte.ini.push_back(pair<int, int>(med, e.n - 1));
  e = nexte;
  normalizar(e);
  elem e1, e2;
  e1.n = med + 2;
  e2.n = e.n - med;
  for (int i = 0; i <= med; i++) e1.id.push_back(e.id[i]);
  e1.id.push_back(e.id[e.n - 1]);
  for (int i = med; i < e.n; i++) e2.id.push_back(e.id[i]);
  for (int i = 0; i < e.n - 3; i++) {
    pair<int, int> p = e.ini[i];
    if (med <= p.first) {
      if (p.first != med or p.second != e.n - 1)
        e2.ini.push_back(pair<int, int>(p.first - med, p.second - med));
    } else {
      if (p.second != e.n - 1)
        e1.ini.push_back(p);
      else
        e1.ini.push_back(pair<int, int>(p.first, e1.n - 1));
    }
  }
  for (int i = 0; i < e.n - 3; i++) {
    pair<int, int> p = e.fin[i];
    if (med <= p.first) {
      if (p.first != med or p.second != e.n - 1)
        e2.fin.push_back(pair<int, int>(p.first - med, p.second - med));
    } else {
      if (p.second != e.n - 1)
        e1.fin.push_back(p);
      else
        e1.fin.push_back(pair<int, int>(p.first, e1.n - 1));
    }
  }
  genera(e1);
  genera(e2);
}
int main() {
  elem e;
  cin >> e.n;
  e.id = vector<int>(e.n);
  for (int i = 0; i < e.n; i++) e.id[i] = i + 1;
  e.ini = e.fin = vector<pair<int, int> >(e.n - 3);
  for (int i = 0; i < e.n - 3; i++) {
    cin >> e.ini[i].first >> e.ini[i].second;
    e.ini[i].first--;
    e.ini[i].second--;
  }
  for (int i = 0; i < e.n - 3; i++) {
    cin >> e.fin[i].first >> e.fin[i].second;
    e.fin[i].first--;
    e.fin[i].second--;
  }
  genera(e);
  cout << int(sol.size()) << endl;
  for (int i = 0; i < int(sol.size()); i++)
    cout << sol[i].first << " " << sol[i].second << endl;
}
