#include <iostream>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;
int N;
struct Node
{
int x,y;
bool operator<(const Node&node) const
{
if(x == node.x)
{
return y > node.y;
}
return x < node.x;
}
};
bool cmp(const Node& a,const Node& b)
{
if(a.x == b.x)
{
return a.y < b.y;
}
return a.x < b.x;
}
const int maxn = 10010;
Node node[maxn];
Node ans[maxn];
int cnt;
int main()
{
while(scanf("%d",&N) != EOF)
{
memset(ans,0,sizeof(ans));
memset(node,0,sizeof(node));
cnt = 0;
int x,y;
int minpos = -1;
int minval = 0x3f3f3f3f;
for(int i=0;i<N;i++)
{
scanf("%d%d",&x,&y);
node[i].x = x ;
node[i].y = y;
}
sort(node,node+N);
int minns = 0x3f3f3f3f;
for(int i=0;i<N;i++)
{
if(node[i].y <= minval)
{
minpos = i;
minval = node[i].y;
ans[cnt].x = node[i].x;
ans[cnt].y = node[i].y;
cnt ++;
}
}
printf("%d\n",cnt);
sort(ans,ans+cnt,cmp);
for(int i=0;i<cnt;i++)
{
printf("%d %d\n",ans[i].x,ans[i].y);
}
}
}