#include<cstdio>
struct garbage{
int x;
int y;
}a[1001];
int n;
int judge(int x,int y)
{
for(int i=0;i<n;i++)
{
if(a[i].x==x&&a[i].y==y)
return 1;
}
return 0;
}
int Islocation(garbage b)//判断是否为回收点
{
if(judge(b.x,b.y+1)&&judge(b.x,b.y-1)&&judge(b.x-1,b.y)&&judge(b.x+1,b.y))
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int num[5]={0},count=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
for(int i=0;i<n;i++)
{
if(Islocation(a[i])==1)//判断四个对角位置有几处存在垃圾
{
if(judge(a[i].x-1,a[i].y+1))
count++;
if(judge(a[i].x+1,a[i].y+1))
count++;
if(judge(a[i].x-1,a[i].y-1))
count++;
if(judge(a[i].x+1,a[i].y-1))
count++;
num[count]++;
count=0;
}
}
for(int i=0;i<5;i++)
{
printf("%d\n",num[i]);
}
return 0;
}