#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
struct P {
  int x, y;
  bool operator<(P p) const {
    if (x == p.x) return y < p.y;
    return x < p.x;
  }
} p[10005];
set<P> s;
void divide(int l, int r) {
  if (l == r) return;
  int m = (l + r) >> 1;
  for (int i = l; i <= r; i++) {
    s.insert({p[m].x, p[i].y});
  }
  divide(l, m);
  divide(m + 1, r);
}
int main() {
  int n;
  while (scanf("%d", &n) != EOF) {
    for (int i = 0; i < n; i++) {
      scanf("%d%d", &p[i].x, &p[i].y);
      s.insert(p[i]);
    }
    sort(p, p + n);
    divide(0, n - 1);
    printf("%d\n", s.size());
    for (auto it = s.begin(); it != s.end(); it++) {
      printf("%d %d\n", (*it).x, (*it).y);
    }
  }
  return 0;
}
