#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 2e5 + 5;
const int mod = 1e9 + 7;
const double eps = 1e-8;
struct Point {
  int x, y;
} cr[maxn], coor[maxn];
bool cmp(Point a, Point b) {
  if (a.x == b.x) return a.y < b.y;
  return a.x < b.x;
};
int n, m, cnt;
void bf(int l, int r) {
  if (l > r) return;
  int mid = l + r >> 1;
  for (int i = l; i <= r; ++i) {
    if (cr[mid].x == cr[i].x) continue;
    cr[++cnt].x = cr[mid].x, cr[cnt].y = cr[i].y;
  }
  bf(l, mid - 1), bf(mid + 1, r);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d%d", &cr[i].x, &cr[i].y);
  cnt = n;
  sort(cr + 1, cr + 1 + n, cmp);
  bf(1, n);
  sort(cr + 1, cr + 1 + cnt, cmp);
  int cnr = 1;
  coor[1].x = cr[1].x, coor[1].y = cr[1].y;
  for (int i = 2; i <= cnt; ++i) {
    if (cr[i].x != cr[i - 1].x || cr[i].y != cr[i - 1].y)
      coor[++cnr].x = cr[i].x, coor[cnr].y = cr[i].y;
  }
  printf("%d\n", cnr);
  for (int i = 1; i <= cnr; ++i) printf("%d %d\n", coor[i].x, coor[i].y);
  return 0;
}
