{
zadatak: kartice
jezik: pascal
}
program kartice;
var fin, fou:text;
		n:integer;
		x,y: array[1..3000] of longint;
		a:array[1..3000] of integer;
		{rastx,rasty: array [1..3000, 1..3000] of longint;}
		bcx,bcy,cx,cy,bsc,csc,i,j,k,l:longint;
		ok:boolean;
begin
	assign(fin,'kartice.in'); reset(fin);
	assign(fou,'kartice.out'); rewrite(fou);
	readln(fin,n);
	for i:=1 to n do readln(fin,x[i],y[i]);
	a[1]:=0;
	a[2]:=1;
	bcx:=x[2]-x[1]; bcy:=y[2]-y[1];
	{for i:=1 to 3000 do for j:=1 to 3000 do begin rastx[i,j]:=0; rasty[i,j]:=0; end;
	rastx[2,1]:=bcx; rasty[2,1]:=bcy;}

	for i:=2 to n do begin
		ok:=false;
		for j:=1 to i-1 do begin
			if (x[i]-x[j]=bcx) and (y[i]-y[j]=bcy) then begin
				ok:=true; a[i]:=a[i-1]+1;
			end;
		end;
		if not(ok) then begin
			bsc:=a[i-1];
			{for l:=1 to i-1 do begin
				for j:=1 to i-1 do for k:=1 to j-1 do
					if (x[k]-x[j]=x[i]-x[l]) and (y[k]-y[j]=y[i]-y[l]) then
						inc(csc);
					if csc>bsc then begin
						bsc:=csc; bcx:=x[i]-x[l];
						bcy:=y[i]-y[l]; break;
					end;
			end;}
			for j:=1 to i-1 do begin
				cx:=x[i]-x[j]; cy:=y[i]-y[j]; csc:=1;
				for k:=1 to i-1 do
					for l:=1 to i-1 do
						if (x[l]-x[k]=cx) and (y[l]-y[k]=cy)
						then inc(csc);
				if csc>bsc then begin
					bsc:=csc; bcx:=cx; bcy:=cy;
				end;
			end;
			a[i]:=bsc;
		end;
	end;

	for i:=1 to n do writeln(fou,a[i]);
	close(fin); close(fou);
end.
