{
ZADATAK: kartice
JEZIK: pascal
}
program Kartice;
const
	MaxN = 3005;
  MaxM = 9000005;
var
	dx, dy, d: array [1.. MaxM] of LongInt;
	Sol, x, y: array [1.. MaxN] of LongInt;
  m, max, n: LongInt;
  f, g: Text;

  procedure InPut;
  var
  	i: LongInt;
  begin
  	Assign (f, 'kartice.in');
    Reset (f);
    ReadLn (f, n);
    for i := 1 to n do
    	ReadLn (f, x [i], y [i]);
    Close (f);
  end;

  procedure QSort (l, r: LongInt);
  var
  	i, j, tmp, px, py: LongInt;
  begin
  	if (l < r) then begin
    	px := dx [(l + r) DIV 2];
      py := dy [(l + r) DIV 2];
      i := l; j := r;
      repeat
      	while (dx [i] < px) or ((dx [i] = px) and (dy [i] < py)) do Inc (i);
        while (dx [j] > px) or ((dx [j] = px) and (dy [j] > py)) do Dec (j);
        if (i <= j) then begin
        	tmp := dx [i]; dx [i] := dx [j]; dx [j] := tmp;
          tmp := dy [i]; dy [i] := dy [j]; dy [j] := tmp;
          Inc (i); Dec (j);
        end;
      until (i > j);
    	QSort (l, j);
      QSort (i, r);
    end;
  end;

  function Find (p, q, l, r: LongInt): LongInt;
	var
  	tx, ty, x: LongInt;
  begin
  	if (r - l > 1) then begin
    	x := (l + r) DIV 2;
    	tx := dx [x];
      ty := dy [x];
      if (tx < p) then
      	Find := Find (p, q, x, r);
      if (tx > p) then
      	Find := Find (p, q, l, x);
      if (tx = p) then begin
      	if (ty <= q) then
        	Find := Find (p, q, x, r);
        if (ty > q) then
        	Find := Find (p, q, l, x);
      end;
    end
    else begin
    	if (dx [l] = p) and (dy [l] = q) then
      	Find := l
      else
      	Find := r;
    end;
  end;

  procedure Solve;
  var
  	k, p, q, m1, i, j: LongInt;
  begin
  	m := 0;
    for i := 1 to n do
    	for j := 1 to n do
      	if (i <> j) then begin
        	Inc (m);
          dx [m] := x [j] - x [i];
          dy [m] := y [j] - y [i]; 		
        end;
    QSort (1, m);

    m1 := 0;
    i := 1;
    while (i <= m) do begin
      Inc (m1);
      dx [m1] := dx [i];
      dy [m1] := dy [i];
      while (dx [i] = dx [m1]) and (dy [i] = dy [m1]) and (i <= m) do
      	Inc (i);
    end;
    m := m1;

    FillChar (d, SizeOf (d), 0);
    max := 0;
    Sol [1] := 0;
    for i := 2 to n do begin
    	for j := 1 to i - 1 do begin
      	p := x [i] - x [j];
        q := y [i] - y [j];
        k := Find (p, q, 1, m);
        d [k] := d [k] + 1;
        if (max < d [k]) then
        	max := d [k];
      end;
    	for j := 1 to i - 1 do begin
      	p := x [j] - x [i];
        q := y [j] - y [i];
        k := Find (p, q, 1, m);
        d [k] := d [k] + 1;
        if (max < d [k]) then
        	max := d [k];
      end;
      Sol [i] := max;
    end;
  end;

  procedure OutPut;
  var
  	i: LongInt;
  begin
  	Assign (g, 'kartice.out');
    ReWrite (g);
    for i := 1 to n do
    	WriteLn (g, Sol [i]);
    Close (g);
  end;

begin
	InPut;
  Solve;
  OutPut;
end.
