{
ZADATAK: kartice
JEZIK: pascal
}
Program kartice;
var
	fin,fout:text;
	i,tdx,tdy,br,otac,res,poz,m,n,gg:longint;
	x,y:array[1..3000]of longint;
	kol,l,d,dx,dy:array[1..9000000]of longint;

function manje(x1,y1,x2,y2:longint):boolean;
begin
	manje:=(x1<x2)or((x1=x2)and(y1<y2));
end;
procedure find(xx,yy:longint;var otac,poz:longint);
var
	found:boolean;
begin
	otac:=0;
	poz:=1;
	found:=false;
	repeat
		if manje(xx,yy,dx[poz],dy[poz]) then
		begin
			otac:=-poz;
			poz:=l[poz];
		end else
		if manje(dx[poz],dy[poz],xx,yy) then
		begin
			otac:=poz;
			poz:=d[poz];
		end else
			found:=true;
	until (poz=gg)or found;

	if found then
		otac:=0;
end;

begin
	assign(fin,'kartice.in');reset(fin);
	assign(fout,'kartice.out');rewrite(fout);

	readln(fin,m);
	writeln(fout,0);
	writeln(fout,1);
	readln(fin,x[1],y[1]);
	readln(fin,x[2],y[2]);

	gg:=m*m;

	dx[1]:=x[1]-x[2]; dy[1]:=y[1]-y[2];
	l[1]:=gg; d[1]:=gg;
	kol[1]:=1;
	br:=1;

	res:=1;
	for n:=3 to m do
	begin
		readln(fin,x[n],y[n]);

		for i:=1 to n-1 do
		begin
			tdx:=x[i]-x[n];
			tdy:=y[i]-y[n];
			find(tdx,tdy,otac,poz);

			if otac=0 then
			begin
				inc(kol[poz]);
				if kol[poz]>res then
					res:=kol[poz];
			end else
			begin
				inc(br);
				dx[br]:=tdx; dy[br]:=tdy;
				l[br]:=gg; d[br]:=gg;
				kol[br]:=1;

				if otac>0 then
					d[otac]:=br else
						l[-otac]:=br;
			end;

			tdx:=x[n]-x[i];
			tdy:=y[n]-y[i];
			find(tdx,tdy,otac,poz);

			if otac=0 then
			begin
				inc(kol[poz]);
				if kol[poz]>res then
					res:=kol[poz];
			end else
			begin
				inc(br);
				dx[br]:=tdx; dy[br]:=tdy;
				l[br]:=gg; d[br]:=gg;
				kol[br]:=1;

				if otac>0 then
					d[otac]:=br else
						l[-otac]:=br;
			end;
		end;

		writeln(fout,res);
	end;



	close(fin);close(fout);
end.