#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7, M = 1e2 + 5;
void Solution();
int n;
struct comp {
  bool operator()(pair<int, int> a, pair<int, int> b) {
    return ((a.first - a.second + n) % n) < ((b.first - b.second + n) % n);
  }
};
int adjcur[1005];
int adjgoal[1005];
set<pair<int, int>, comp> adjtemp[1005];
vector<pair<int, int> > ans;
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0);
  Solution();
  return 0;
}
int getl(int cur, set<pair<int, int>, comp>::iterator neib) {
  int res;
  if (neib != adjtemp[cur].begin()) {
    res = (prev(neib))->first;
  } else {
    res = (cur + 1) % n;
  }
  return res;
}
int getr(int cur, set<pair<int, int>, comp>::iterator neib) {
  int res;
  if (next(neib) != adjtemp[cur].end()) {
    res = (next(neib))->first;
  } else {
    res = (cur - 1 + n) % n;
  }
  return res;
}
void setadjtemp() {
  for (long long int i = 0; i < n; i++) {
    adjtemp[i].clear();
  }
  for (long long int i = 2; i < n - 1; i++) {
    adjtemp[0].insert(adjtemp[0].end(), {i, 0});
    adjtemp[i].insert({0, i});
  }
}
void solveA() {
  vector<pair<int, int> > res;
  setadjtemp();
  int g = 0;
  int i = 0;
  while (g < n) {
    if (adjtemp[i].size() == adjcur[i]) {
      g++;
    } else {
      g = 0;
      int er = -1;
      if (adjtemp[i].size() > adjcur[i]) {
        for (auto neib = adjtemp[i].begin(); neib != adjtemp[i].end(); neib++) {
          if (adjtemp[neib->first].size() > adjcur[neib->first]) {
            int c, d;
            c = getl(i, neib);
            d = getr(i, neib);
            adjtemp[c].insert({d, c});
            adjtemp[d].insert({c, d});
            adjtemp[neib->first].erase({i, neib->first});
            er = neib->first;
            res.push_back({d, c});
            break;
          }
        }
      }
      g++;
      if (er != -1) adjtemp[i].erase({er, i});
    }
    i = (i + 1) % n;
  }
  reverse(res.begin(), res.end());
  ans.insert(ans.end(), res.begin(), res.end());
}
void solveB() {
  setadjtemp();
  int g = 0;
  int i = 0;
  while (g < n) {
    if (adjtemp[i].size() == adjgoal[i]) {
      g++;
    } else {
      g = 0;
      int er = -1;
      if (adjtemp[i].size() > adjgoal[i]) {
        for (auto neib = adjtemp[i].begin(); neib != adjtemp[i].end(); neib++) {
          if (adjtemp[neib->first].size() > adjgoal[neib->first]) {
            int c, d;
            c = getl(i, neib);
            d = getr(i, neib);
            adjtemp[c].insert({d, c});
            adjtemp[d].insert({c, d});
            adjtemp[neib->first].erase({i, neib->first});
            er = neib->first;
            ans.push_back({er, i});
            break;
          }
        }
      }
      g++;
      if (er != -1) adjtemp[i].erase({er, i});
    }
    i = (i + 1) % n;
  }
}
void Solution() {
  cin >> n;
  for (long long int i = 0; i < n - 3; i++) {
    int a, b;
    cin >> a >> b;
    adjcur[--a]++;
    adjcur[--b]++;
  }
  for (long long int i = 0; i < n - 3; i++) {
    int a, b;
    cin >> a >> b;
    adjgoal[--a]++;
    adjgoal[--b]++;
  }
  solveA();
  solveB();
  cout << ans.size() << endl;
  for (pair<int, int> x : ans) {
    cout << x.first + 1 << " " << x.second + 1 << endl;
  }
}
