{
zadatak: kartice
jezik: pascal
}
program kartice;

type pok=^element;
		 element=record
								prva,druga:longint;
								ma:longint;
								sl:pok;
						 end;

var f,gout:text;
		a:array[1..3000,1..2] of longint;
		l,p,pom,l1:pok;
		n,i,j,br,x,y,max,max1,k,d,g,ix,iy,poc:longint;

begin
	 assign(f,'kartice.in'); reset(f);
	 assign(gout,'kartice.out'); rewrite(gout);
	 readln(f,n);
	 for i:=1 to n do readln(f,a[i,1],a[i,2]);
	 close(f);
	 writeln(gout,0);
	 l:=nil; max:=0;

	 for i:=2 to n do begin
			p:=l; max1:=max;
			while p<>nil do begin
				 d:=a[p^.druga,1]-a[p^.prva,1];
				 g:=a[p^.druga,2]-a[p^.prva,2];
				 ix:=a[i,1]+d;
				 iy:=a[i,2]+g;
				 poc:=1;
				 while ((a[poc,1]<>ix) or (a[poc,2]<>iy)) and (poc<=i) do inc(poc);
				 if poc<i then begin
						p^.ma:=max1+1;
						if max1=max then inc(max);
				 end else p^.ma:=max1;
				 p:=p^.sl;
			end;
			if max=max1+1 then writeln(gout,max);
			if max1=max then begin
				 for j:=1 to i-1 do begin
						br:=1;
						d:=a[i,1]-a[j,1];
						g:=a[i,2]-a[j,2];
						for k:=1 to i-1 do
							 if k<>j then begin
									poc:=1;
									while ((a[k,1]+d<>a[poc,1]) or (a[k,2]+g<>a[poc,2]))
									and (poc<=i) do inc(poc);
									if poc<i then inc(br);
							 end;
						if br>=max then begin
							 new(pom);
							 pom^.ma:=br;
							 pom^.prva:=j;
							 pom^.druga:=i;
							 pom^.sl:=l;
							 l:=pom;
							 max:=br;
						end;
						d:=-d;
						g:=-g;
						br:=1;
						for k:=1 to i-1 do
							 if k<>j then begin
									poc:=1;
									while ((a[k,1]+d<>a[poc,1]) or (a[k,2]+g<>a[poc,2]))
									and (poc<=i) do inc(poc);
									if poc<i then inc(br);
							 end;
						if br=max then begin
							 new(pom);
							 pom^.ma:=br;
							 pom^.prva:=i;
							 pom^.druga:=j;
							 pom^.sl:=l;
							 l:=pom;
						end;
				 end;
				 writeln(gout,max);
			end;
			p:=l; l1:=nil;
			while p<>nil do begin
				 if p^.ma=max then begin
						new(pom);
						pom^.prva:=p^.prva;
						pom^.druga:=p^.druga;
						pom^.ma:=max;
						pom^.sl:=l1;
						l1:=pom;
				 end;
				 p:=p^.sl;
			end;
			while l<>nil do begin
				 pom:=l;
				 l:=l^.sl;
				 dispose(pom);
			end;
			l:=l1;
	 end;
	 close(gout);

end.












