#include <bits/stdc++.h>
using namespace std;
void generate(int l, int r, vector<pair<int, int> >& pts,
              vector<pair<int, int> >& out) {
  if (l == r) return;
  int mid = (r + l) / 2, ml = mid, mr = mid;
  while (ml >= l && pts[mid].first == pts[ml].first) ml--;
  ml++;
  while (mr < r && pts[mid].first == pts[mr].first) mr++;
  for (int i = l; i < r; i++)
    out.push_back(make_pair(pts[mid].first, pts[i].second));
  generate(l, ml, pts, out);
  generate(mr, r, pts, out);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  vector<pair<int, int> > pts(n);
  for (int i = 0; i < n; i++) cin >> pts[i].first >> pts[i].second;
  sort(pts.begin(), pts.end());
  vector<pair<int, int> > out;
  generate(0, n, pts, out);
  sort(out.begin(), out.end());
  out.resize(unique(out.begin(), out.end()) - out.begin());
  cout << out.size() << '\n';
  for (auto c : out) cout << c.first << ' ' << c.second << '\n';
  return 0;
}
