#include<iostream>
using namespace std;
#include <map>
typedef struct node
{
long long x,y;
bool isrecy;
int score;
}coordinate;
bool isrecy(coordinate p,coordinate pos[],int n)
{
bool flag1=false,flag2=false,flag3=false,flag4=false;
for(int i=0;i<n;i++)
{
if(pos[i].x-1==p.x&&pos[i].y==p.y)flag1=true;
else if(pos[i].x+1==p.x&&pos[i].y==p.y)flag2=true;
else if(pos[i].x==p.x&&pos[i].y+1==p.y)flag3=true;
else if(pos[i].x==p.x&&pos[i].y-1==p.y)flag4=true;
}
if(flag1&&flag2&&flag3&&flag4)return true;
else return false;
}
int score(coordinate p,coordinate pos[],int n)
{
int score=0;
for(int i=0;i<n;i++)
{
if(p.x-1==pos[i].x&&p.y-1==pos[i].y)score++;
else if(p.x-1==pos[i].x&&p.y+1==pos[i].y)score++;
else if(p.x+1==pos[i].x&&p.y+1==pos[i].y)score++;
else if(p.x+1==pos[i].x&&p.y-1==pos[i].y)score++;
}
return score;
}
int main(void)
{
int n;
cin>>n;
coordinate pos[n];
for(int i=0;i<n;i++)
{
cin>>pos[i].x>>pos[i].y;
}
for(int i=0;i<n;i++)
{
pos[i].isrecy=isrecy(pos[i],pos,n);
}
for(int i=0;i<n;i++)
{
pos[i].score=0;
}
for(int i=0;i<n;i++)
{
if(isrecy(pos[i],pos,n)) {
pos[i].score = score(pos[i], pos, n);
}
}
int score[5]={0};
for(int i=0;i<n;i++)
{
if(isrecy(pos[i],pos,n)) {
score[pos[i].score]++;
}
}
for(int i=0;i<5;i++)
{
cout<<score[i]<<endl;
}
return 0;
}