//回收站选址
#include<iostream>
#include<cstring>
using namespace std;
struct Dot{
int x;
int y;
};
//判断能否作为回收站 (d1-待检测的地址,d2-检测d1能否作为回收站)
void IsRecycleBin(int &sum, Dot d1, Dot d2){
if( d1.x == d2.x && d1.y == d2.y + 1) sum++;
else if( d1.x == d2.x && d1.y == d2.y - 1) sum++;
else if( d1.x == d2.x + 1 && d1.y == d2.y) sum++;
else if( d1.x == d2.x - 1 && d1.y == d2.y) sum++;
return ;
}
//记录评分
void score(int &sum, Dot d1, Dot d2){
if( d1.x == d2.x + 1 && d1.y == d2.y + 1) sum++;
else if( d1.x == d2.x - 1 && d1.y == d2.y - 1) sum++;
else if( d1.x == d2.x + 1 && d1.y == d2.y - 1) sum++;
else if( d1.x == d2.x - 1 && d1.y == d2.y + 1) sum++;
return ;
}
int main(){
int n;
cin >> n;
Dot dot[n];
int x, y;
int ans[5];
memset(ans, 0, sizeof(ans));
for(int i = 0; i < n; ++i){
cin >> dot[i].x >> dot[i].y;
}
for(int i = 0; i < n; ++i){
int sum1 = 0;//判断是否满足回收站的条件
int sum2 = 0;//计算回收站的评分
for(int j = 0; j < n; ++j){
IsRecycleBin(sum1, dot[i], dot[j]);
score(sum2, dot[i], dot[j]);
}
if(sum1 == 4){
ans[sum2]++;
}
}
for(int i = 0; i < 5; ++i){
cout << ans[i] << endl;
}
return 0;
}