#include <bits/stdc++.h>
using namespace std;
static const double EPS = 1e-9;
static const double PI = acos(-1.0);
struct Point {
  int x;
  int y;
  Point() { ; }
  Point(int x, int y) : x(x), y(y) { ; }
  bool operator<(const Point &rhs) const {
    if (x != rhs.x) {
      return x < rhs.x;
    }
    return y < rhs.y;
  }
};
set<Point> ans;
Point points[10010];
void calc(int left, int right) {
  if (left > right) {
    return;
  }
  int mid = (left + right) / 2;
  int cx = points[mid].x;
  for (int i = (left); i <= (int)(right); i++) {
    ans.insert(Point(cx, points[i].y));
  }
  int lmid = mid;
  int rmid = mid;
  while (lmid >= left && points[lmid].x == cx) {
    lmid--;
  }
  while (rmid <= right && points[rmid].x == cx) {
    rmid++;
  }
  calc(left, lmid);
  calc(rmid, right);
}
int main() {
  int n;
  while (scanf("%d", &n) > 0) {
    ans.clear();
    for (int i = 0; i < (int)(n); i++) {
      int x, y;
      scanf("%d %d", &x, &y);
      points[i] = Point(x, y);
    }
    sort(points, points + n);
    calc(0, n - 1);
    assert(ans.size() <= 200000);
    printf("%d\n", (int)ans.size());
    for (__typeof((ans).begin()) it = (ans).begin(); it != (ans).end(); it++) {
      printf("%d %d\n", it->x, it->y);
    }
  }
}
