/*
ZADATAK: kartice
JEZIK: C++
*/
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <math.h>
#include <set>
#include <ext/hash_set>
#include <map>

using namespace std;
using  __gnu_cxx::hash_set;
using  __gnu_cxx::hash;

class pt
{
  public:
    pt() {};
    pt(int ax, int ay):x(ax), y(ay) {}
    inline bool operator<(const pt& rhs) const 
      {return (x < rhs.x || (x == rhs.x && y < rhs.y));}
    inline bool operator==(const pt& rhs) const 
      {return (x == rhs.x && y == rhs.y);}
    inline pt operator+(const pt& rhs) const
      {return pt(x + rhs.x, y + rhs.y);}
    inline pt operator-(const pt& rhs) const
      {return pt(x - rhs.x, y - rhs.y);}
    inline pt operator-() const
      {return pt(-x, -y);}
    int x;
    int y;
};

int N=0;
pt * PTS;
//set<pt> SPTS;
map<pt,int> MAXS;
int MAX=0;


void read()
{
  FILE * fi = fopen("kartice.in","r");
  fscanf(fi,"%d\n",&N);
  PTS = new pt[N+5];
  pt * p = PTS;
  for (int i=0; i<N; i++)
  {
    int x,y;
    fscanf(fi,"%d %d",&x,&y);
    *p++ = pt(x,y);
  }
  fclose(fi);
}

void update_max(int pos)
{
  pt p = PTS[pos];
  for (int i=0; i<pos; i++)
  {
    pt d=PTS[i]-p;
    d=max(d,-d);
    int & m = MAXS[d];
    m++;
    MAX = max(MAX,m);
  }
}

void calc()
{
  FILE * fo = fopen("kartice.out","w");
  for (int i=0; i<N; i++)
  {
    update_max(i);
    fprintf(fo,"%d\n",MAX);
  }
}

int main(int argc, char *argv[])
{
  read();
  calc();
  system("pause");
  return EXIT_SUCCESS;
}
