{
ZADATAK: kartice
JEZIK: PASCAL
}
program kartice;
type tacka=record
     x,y:longint;
     end;
     niz=array [0..3000] of tacka;
     tra=record
     x,y:integer;
     z:longint;
     end;
var a:niz;
    i,res,n:longint;
    t:tacka;
    m:array [1..3000,1..3000] of tra;
function nadjen (x,y,n:longint):boolean;
var i:integer;
    ok:boolean;
begin
  ok:=false;
  i:=0;
  repeat
    inc (i);
    if x=a[i].x then
       if y=a[i].y then
          ok:=true;
  until
    (ok) or (i=n);
  nadjen:=ok;
end;
procedure odredi (n:integer);
var i,j:integer;
begin
  for i:=1 to n-1 do
      for j:=1 to n-1 do
          if i<>j then
          if nadjen (a[n].x+m[i,j].x,a[n].y+m[i,j].y,n) then
             begin
               inc (m[i,j].z);
               if m[i,j].z>res then res:=m[i,j].z;
             end;
  for i:=1 to n-1 do
      begin
        m[i,n].x:=a[n].x-a[i].x;
        m[i,n].y:=a[n].y-a[i].y;
        for j:=1 to n-1 do
            if nadjen (a[j].x+m[i,n].x,a[j].y+m[i,n].y,n) then inc (m[i,n].z);
        if m[i,n].z>res then res:=m[i,n].z;
        m[n,i].x:=a[i].x-a[n].x;
        m[n,i].y:=a[i].y-a[n].y;
        for j:=1 to n-1 do
            if nadjen (a[j].x+m[i,n].x,a[j].y+m[i,n].y,n) then inc (m[n,i].z);
        if m[n,i].z>res then res:=m[n,i].z;
      end;
end;
procedure datin;
var f1,f2:text;
    i:longint;
begin
  assign (f1,'kartice.in');
  reset (f1);
  assign (f2,'kartice.out');
  rewrite (f2);
  readln (f1,n);
  readln (f1,a[1].x,a[1].y);
  writeln (f2,'0');
  m[1,1].z:=1;
  for i:=2 to n do
      begin
        readln (f1,a[i].x,a[i].y);
        odredi (i);
        writeln (f2,res);
      end;
  close (f1);
  close (f2);
end;
procedure init;
var i:integer;
begin
  for i:=0 to 3000 do
  begin
  a[i].x:=-2000000000;
  a[i].y:=-2000000000;
  end;
end;
begin
{  init;}
  datin;
end.
