#include <bits/stdc++.h>
using namespace std;
vector<pair<pair<int, int>, int> > A;
int n, m;
int B[1000000];
int C[10];
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    pair<pair<int, int>, int> a;
    cin >> a.first.first >> a.first.second;
    a.second = i;
    A.push_back(a);
  }
  sort(A.begin(), A.end());
  int t = 0;
  for (int i = 0; i < A.size(); i++) {
    t = A[i].first.first;
    while (i + 1 < A.size() && A[i + 1].first.first == t) {
      B[A[i].second]++;
      B[A[i + 1].second]++;
      i++;
    }
  }
  for (int i = 0; i < A.size(); i++) {
    swap(A[i].first.first, A[i].first.second);
  }
  sort(A.begin(), A.end());
  t = 0;
  for (int i = 0; i < A.size(); i++) {
    t = A[i].first.first;
    while (i + 1 < A.size() && A[i + 1].first.first == t) {
      B[A[i].second]++;
      B[A[i + 1].second]++;
      i++;
    }
  }
  for (int i = 0; i < A.size(); i++) {
    int a = A[i].first.first + A[i].first.second;
    int b = A[i].first.first - A[i].first.second;
    A[i].first.first = a;
    A[i].first.second = b;
  }
  sort(A.begin(), A.end());
  t = 0;
  for (int i = 0; i < A.size(); i++) {
    t = A[i].first.first;
    while (i + 1 < A.size() && A[i + 1].first.first == t) {
      B[A[i].second]++;
      B[A[i + 1].second]++;
      i++;
    }
  }
  for (int i = 0; i < A.size(); i++) {
    swap(A[i].first.first, A[i].first.second);
  }
  sort(A.begin(), A.end());
  t = 0;
  for (int i = 0; i < A.size(); i++) {
    t = A[i].first.first;
    while (i + 1 < A.size() && A[i + 1].first.first == t) {
      B[A[i].second]++;
      B[A[i + 1].second]++;
      i++;
    }
  }
  for (int i = 0; i < A.size(); i++) C[B[i]]++;
  for (int i = 0; i < 9; i++) cout << C[i] << " ";
  cout << endl;
  return 0;
}
