uses
	math;

const
	maxn = 10000;
	eps = 1e-9;

var
	i, j, k, m, n: longint;
	rx, ry, vang, tx, ty, dx, dy: extended;
	xx, yy, x, y: array [1..maxn] of extended;
	da: extended;
	v: array [1..maxn] of longint;
	bd, tp, td: extended;
	ang: extended;
	r: extended;

begin
	randseed := 22828866;

	rx := 400;
	ry := 500;

	n := 2400;

	for i := 1 to n do begin
		ang := random * pi;
		r := (1 - random * random * random);
		x[i] := r * rx * cos(ang);
		y[i] := r * ry * sin(ang);
	end;

	j := 1;
	for i := 2 to n do
		if (y[i] < y[j]) or ((y[i] = y[j]) and (x[i] < x[j])) then
			j := i;

	m := 0;
	k := j;
	repeat
		inc(m);
		v[m] := k;

		k := 0;
		bd := 0;
		for i := 1 to n do begin
			if (i <> v[m]) then begin
				tp := 
        			(x[k] - x[v[m]]) * (y[i] - y[v[m]]) -
        			(y[k] - y[v[m]]) * (x[i] - x[v[m]]);
        		td := hypot(x[i] - x[v[m]], y[i] - y[v[m]]);
        	   	if (k = 0) or (tp < -eps) or ((tp < eps) and (td > bd)) then begin
        	   		k := i;
        	   		bd := td;
        	   	end;
			end;
		end;
	until k = j;

	for i := 1 to m do begin
		xx[i] := x[v[i]];
		yy[i] := y[v[i]];
	end;
	for i := 1 to m do begin
		x[i] := xx[i];
		y[i] := yy[i];
	end;
	n := m;

	vang := -pi / 4 + random * 0.6;
	for i := 1 to n do begin
		tx := x[i] * cos(vang) - y[i] * sin(vang);
		ty := x[i] * sin(vang) + y[i] * cos(vang);
		x[i] := tx;
		y[i] := ty;
	end;

	dx := 200;
	dy := 400;

	for i := 1 to n do begin
		x[i] := x[i] + dx;
		y[i] := y[i] + dy;
	end;

	vang := 2 * pi * random;
	for i := 1 to n do begin
		tx := x[i] * cos(vang) - y[i] * sin(vang);
		ty := x[i] * sin(vang) + y[i] * cos(vang);
		x[i] := tx;
		y[i] := ty;
	end;

	writeln(n);
	for i := 1 to n do begin
		writeln(x[i] :0 :12, ' ', y[i] :0 :12);
	end;
end.