#include <bits/stdc++.h>
using namespace std;
const long long N = 55500;
set<pair<long long, long long> > s[N];
long long n;
pair<long long, long long> x[N];
void AliF(long long l, long long r, long long node) {
  if (l == r) {
    s[node].insert({x[l].first, x[l].second});
    return;
  }
  long long mid = (l + r) / 2;
  AliF(l, mid, node * 2);
  AliF(mid + 1, r, node * 2 + 1);
  auto p = s[node * 2 + 1].begin();
  for (auto now : s[node * 2 + 1]) {
    s[node].insert({(*p).first, now.second});
    s[node].insert({now.first, now.second});
  }
  for (auto now : s[node * 2]) {
    s[node].insert({(*p).first, now.second});
    s[node].insert({now.first, now.second});
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie();
  cout.tie();
  cin >> n;
  for (long long i = 1; i <= n; i++) cin >> x[i].first >> x[i].second;
  sort(x + 1, x + n + 1);
  AliF(1, n, 1);
  cout << s[1].size() << endl;
  for (auto a : s[1]) cout << a.first << " " << a.second << endl;
}
