#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
cin >> n; //输入n
vector<vector<int>> bin(n, vector<int>(2));
vector<int> result(5, 0); //初始化每种得分选址数为0
for (int i = 0; i < n; i++) { //输入每处垃圾位置
cin >> bin[i][0] >> bin[i][1];
}
for (int i = 0; i < n; i++) { //遍历每一处垃圾
int orthogonal = 0; //用于统计十字方向的垃圾数量
int opposite = 0; //用于统计斜十字方向的垃圾数量
for (int j = 0; j < n; j++) { //判断与所有垃圾位置关系,注意也包括自己
int x = abs(bin[i][0] - bin[j][0]); //横坐标差绝对值
int y = abs(bin[i][1] - bin[j][1]); //纵坐标差绝对值
if (x + y == 1) orthogonal++; //若两个绝对值的和为1,说明是十字邻居
else if (x * y == 1) opposite++; //若两个绝对值的积为1(或者和为2),说明是斜十字邻居
}
if (orthogonal == 4) result[opposite]++; //若有四个十字邻居,则斜十字邻居数对应的得分选址数加1
}
for (int i : result) { //输出结果
cout << i << endl;
}
return 0;
}