#include<iostream>
using namespace std;
struct pos {
int x;
int y;
bool verify;
int score;
};
int main() {
int n;
cin >> n;
pos * loca = new pos[n];
for (int i=0; i<n; ++i) {
cin >> loca[i].x;
cin >> loca[i].y;
}
for (int i=0; i<n; ++i) {
bool ver1 = false , ver2 = false , ver3 = false , ver4 = false;
for (int j=0; j<n; ++j) {
if((loca[i].x == loca[j].x)&&(loca[i].y + 1 == loca[j].y)) ver1 = true;
if((loca[i].x == loca[j].x)&&(loca[i].y - 1 == loca[j].y)) ver2 = true;
if((loca[i].x - 1 == loca[j].x)&&(loca[i].y == loca[j].y)) ver3 = true;
if((loca[i].x + 1 == loca[j].x)&&(loca[i].y == loca[j].y)) ver4 = true;
}
loca[i].verify = ver1&&ver2&&ver3&&ver4;
}
for (int i=0; i<n; ++i) {
if(loca[i].verify) {
int s1=0,s2=0,s3=0,s4=0;
for (int j=0; j<n; ++j) {
if((loca[i].x - 1== loca[j].x)&&(loca[i].y + 1 == loca[j].y)) s1 = 1;
if((loca[i].x + 1== loca[j].x)&&(loca[i].y + 1 == loca[j].y)) s2 = 1;
if((loca[i].x - 1== loca[j].x)&&(loca[i].y - 1 == loca[j].y)) s3 = 1;
if((loca[i].x + 1== loca[j].x)&&(loca[i].y - 1 == loca[j].y)) s4 = 1;
}
loca[i].score = s1 + s2 + s3 + s4;
}
}
int plaSco[5]={0,0,0,0,0};
for (int i=0; i<n; ++i) {
if(loca[i].verify) {
++plaSco[loca[i].score];
}
}
for (int i=0;i<5;++i){
cout << plaSco[i] <<endl;
}
return 0;
}