#include <stdio.h>
#include <stdlib.h>
int res[5];
typedef struct
{
int x;
int y;
}Point;
void line_sort(Point *arr, int n) //按行(列)排序即可便于查找省时,行列都排序意义不大
{
Point temp;
int i, j;
for(i = 0; i < n - 1; i++)
{
for(j = 0; j < n - i - 1; j++)
{
if(arr[j].x > arr[j + 1].x)
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void find(Point *arr, int n) //查找所有点是否合格,如果是,给出评分
{
int flag, score, i, j;
for(i = 0; i < n; i++)
{
flag = score = 0;
for(j = 0; ; j++)
{
if(arr[j].x - arr[i].x < -1)
{
continue;
}
else if(arr[j].x - arr[i].x > 1)
{
break;
}
else
{
if(abs(arr[j].x - arr[i].x) + abs(arr[j].y - arr[i].y) == 1)//上下左右有点
{
flag++;
}
else if(abs(arr[j].x - arr[i].x) == 1 && abs(arr[j].y - arr[i].y) == 1)//有距离为根号2的点
{
score++;
}
}
}
//至此,检查完一个点是否合格
if(flag == 4)
{
res[score]++;
}
}
}
int main()
{
int n, i;
scanf("%d", &n);
if(n <= 4)
{
printf("0\n0\n0\n0\n0\n");
return 0;
}
Point p_set[n];
for(i = 0; i < n; i++)
{
scanf("%d%d", &p_set[i].x, &p_set[i].y);
}
line_sort(p_set, n); //横轴排序
find(p_set, n); //查找
printf("%d\n%d\n%d\n%d\n%d\n", res[0], res[1], res[2], res[3], res[4]);
return 0;
}