#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
struct node
{
ll x,y;
}a[1005];
int n,ans[5];
int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
map<pair<int,int> ,bool>mp;
int di[4][2]={{-1,1},{1,-1},{1,1},{-1,-1}};
int findeffect(int x,int y)
{
int cnt=0;
for(int j=0;j<4;j++)
{
if(mp[{x+di[j][0],y+di[j][1]}])cnt++;
}
return cnt;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i].x>>a[i].y;
mp[{a[i].x,a[i].y}]=1;
}
for(int i=0;i<n;i++)
{
bool flag=true;
for(int j=0;j<4;j++)
{
if(!flag)break;
if(!mp[{a[i].x+dir[j][0],a[i].y+dir[j][1]}])flag=false;
}
if(flag)
{
int cnt=findeffect(a[i].x,a[i].y);
ans[cnt]++;
}
}
for(int i=0;i<5;i++)
{
cout<<ans[i]<<endl;
}
}