#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma G++ optimize(2)
using namespace std;
int readint() {
  int x = 0;
  bool neg = false;
  char c = getchar();
  while (c < '-') c = getchar();
  if (c == '-') {
    neg = true;
    c = getchar();
  }
  for (; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
  return neg ? -x : x;
}
void _write(int x) {
  if (x >= 10) _write(x / 10);
  putchar(x % 10 + '0');
}
void write(int x) {
  if (x == 0) {
    putchar('0');
    return;
  }
  if (x < 0) {
    putchar('-');
    x = -x;
  }
  _write(x);
}
int N;
pair<int, int> ps[10000];
set<pair<int, int> > pointadd;
void solve(int l, int r) {
  if (l >= r) return;
  int mid = (l + r) >> 1;
  for (int i = l; i <= r; i++)
    pointadd.insert(pair<int, int>(ps[mid].first, ps[i].second));
  solve(l, mid);
  solve(mid + 1, r);
}
int main() {
  N = readint();
  for (int i = 0; i < N; i++) {
    ps[i].first = readint();
    ps[i].second = readint();
  }
  sort(ps, ps + N);
  for (int i = 0; i < N; i++) pointadd.insert(ps[i]);
  solve(0, N - 1);
  printf("%d\n", pointadd.size());
  for (pair<int, int> p : pointadd) printf("%d %d\n", p.first, p.second);
  return 0;
}
