#include<iostream>usingnamespace std;intmain(){int n;
cin >> n;int pos[n][2];//垃圾放置点for(int i =0; i < n; i++){
cin >> pos[i][0]>> pos[i][1];}int score =0;//满足条件的选址的分数0~4int result[5]={0};bool up =false;bool down =false;bool left =false;bool right =false;for(int i =0; i < n; i++){int x = pos[i][0];int y = pos[i][1];
score =0;
up =false;
down =false;
left =false;
right =false;for(int j =0; j < n; j++){if( pos[j][0]== x && pos[j][1]== y+1)
up =true;if( pos[j][0]== x && pos[j][1]== y-1)
down =true;if( pos[j][0]== x-1&& pos[j][1]== y)
left =true;if( pos[j][0]== x+1&& pos[j][1]== y)
right =true;}if( up && down && left && right ){for(int j =0; j < n; j++){if( pos[j][0]== x-1&& pos[j][1]== y+1)//左上
score++;if( pos[j][0]== x+1&& pos[j][1]== y+1)//右上
score++;if( pos[j][0]== x-1&& pos[j][1]== y-1)//左下
score++;if( pos[j][0]== x+1&& pos[j][1]== y-1)//右下
score++;}
result[score]++;}}for(int i =0; i <5; i++)
cout << result[i]<< endl;return0;}