#include<cstdio>
#include<algorithm>
#define x first
#define y second
using namespace std;
int n,pos,i,top,S[120010];
pair<double,double> V[120010];
double P(pair<double,double> a,pair<double,double> b,pair<double,double> c) { return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y); }
bool C(pair<double,double> a, pair<double,double> b) { return P(V[1],a,b)<0; }
int main() {
freopen("infasuratoare.in","r",stdin),freopen("infasuratoare.out","w",stdout),scanf("%d",&n);
for(pos=i=1;i<=n;i++)
scanf("%lf%lf",&V[i].x,&V[i].y),pos=V[i]<V[pos]?i:pos;
swap(V[1],V[pos]),sort(V+2,V+1+n,C),S[++top]=1;
for(i=2;i<=n;i++) {
for(;top>1&&P(V[S[top-1]],V[S[top]],V[i])>0;top--);
S[++top]=i;
}
printf("%d\n",top);
for(;top;top--)
printf("%.6lf %.6lf\n",V[S[top]].x,V[S[top]].y);
}