/*
ZADATAK: kartice
JEZIK: C++
*/
#include <stdio.h>
typedef struct rupa{
	long x,y;
};
typedef struct mov{
	long x,y,v;
	mov *levo,*desno;
};
	mov *koren;
	long max;

long ubaci(long a1,long a2,mov *t)
{
	mov *priv;
	if(a1==t->x && a2==t->y) {
		t->v=t->v+1;
		if(t->v>max)
			max=t->v;
		return 0;
	}
	if(a1>t->x || (a1==t->x && a2>t->y)) {
		if(t->desno==NULL) {
			priv=new mov;
			priv->x=a1;
			priv->y=a2;
			priv->v=1;
			priv->levo=NULL;
			priv->desno=NULL;
			t->desno=priv;
		} else {
			ubaci(a1,a2,t->desno);
		}
		return 0;
	} else {
		if(t->levo==NULL) {
			priv=new mov;
			priv->x=a1;
			priv->y=a2;
			priv->v=1;
			priv->levo=NULL;
			priv->desno=NULL;
			t->levo=priv;
		} else {
			ubaci(a1,a2,t->levo);
		}
		return 0;
	}
}
int main()
{
	int n,i,j;
	rupa a[3500];
	long res[3500],a1,a2;
	FILE *in,*out;
	in=fopen("kartice.in","r");
	fscanf(in,"%d",&n);
	for(i=0;i<n;i++)
		fscanf(in,"%ld %ld",&(a[i].x),&(a[i].y));
	fclose(in);
	
	res[0]=0;
	max=1;
	res[1]=1;
	a1=a[1].x-a[0].x;
	a2=a[1].y-a[0].y;
	if(a1>0 || (a1==0 && a2>0)) {
		koren=new mov;
		koren->x=a1;
		koren->y=a2;
	} else {
		koren=new mov;
		koren->x=-a1;
		koren->y=-a2;
	}
	
	koren->v=1;
	koren->levo=NULL;
	koren->desno=NULL;
	
	for(i=2;i<n;i++) {
		for(j=0;j<i;j++) {
			if(a[i].x>a[j].x || (a[i].x==a[j].x && a[i].y>a[j].y))
				ubaci(a[i].x-a[j].x,a[i].y-a[j].y,koren);
			else
				ubaci(a[j].x-a[i].x,a[j].y-a[i].y,koren);
		}
		res[i]=max;
	}
	out=fopen("kartice.out","w");
	for(i=0;i<n;i++)
		fprintf(out,"%ld\n",res[i]);
	fclose(out);
	return 0;
}
