#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:64000000")
struct line {
  long long XXX, YYY;
  long long A, B, C;
  int id;
};
long long XXX[100005];
long long YYY[100005];
long long n, m;
line l[100005];
line ll[100005];
int ans[10];
int cnt[100005];
inline bool mycmp(const line& L, const line& R) {
  if (L.A == R.A) {
    if (L.B == R.B) {
      if (L.C == R.C) return L.YYY < R.YYY;
      return L.C < R.C;
    }
    return L.B < R.B;
  }
  return L.A < R.A;
}
inline bool myx(const line& L, const line& R) {
  if (L.XXX == R.XXX) {
    return L.YYY < R.YYY;
  }
  return L.XXX < R.XXX;
}
inline bool myy(const line& L, const line& R) {
  if (L.YYY == R.YYY) {
    return L.XXX < R.XXX;
  }
  return L.YYY < R.YYY;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    long long a, b;
    scanf("%I64d %I64d", &a, &b);
    l[i].XXX = a;
    l[i].YYY = b;
    l[i].A = 1;
    l[i].B = -1;
    l[i].C = (a + 1) * b - a * (b + 1);
    l[i].id = i;
    ll[i] = l[i];
    ll[i].A = 1;
    ll[i].B = 1;
    ll[i].C = (a + 1) * b - a * (b - 1);
  }
  random_shuffle(l, l + m);
  sort(l, l + m, &myx);
  for (int i = 0; i < m; i++) {
    int q = 0;
    if (l[i].XXX == l[i + 1].XXX) q++;
    if (i > 0 && l[i].XXX == l[i - 1].XXX) q++;
    cnt[l[i].id] += q;
  }
  random_shuffle(l, l + m);
  sort(l, l + m, &myy);
  for (int i = 0; i < m; i++) {
    int q = 0;
    if (l[i].YYY == l[i + 1].YYY) q++;
    if (i > 0 && l[i].YYY == l[i - 1].YYY) q++;
    cnt[l[i].id] += q;
  }
  random_shuffle(l, l + m);
  sort(l, l + m, mycmp);
  for (int i = 0; i < m; i++) {
    int q = 0;
    if (i + 1 < m && l[i].A == l[i + 1].A && l[i].B == l[i + 1].B &&
        l[i].C == l[i + 1].C)
      q++;
    if (i > 0 && l[i].A == l[i - 1].A && l[i].B == l[i - 1].B &&
        l[i].C == l[i - 1].C)
      q++;
    cnt[l[i].id] += q;
  }
  random_shuffle(ll, ll + m);
  sort(ll, ll + m, mycmp);
  for (int i = 0; i < m; i++) {
    int q = 0;
    if (i + 1 < m && ll[i].A == ll[i + 1].A && ll[i].B == ll[i + 1].B &&
        ll[i].C == ll[i + 1].C)
      q++;
    if (i > 0 && ll[i].A == ll[i - 1].A && ll[i].B == ll[i - 1].B &&
        ll[i].C == ll[i - 1].C)
      q++;
    cnt[ll[i].id] += q;
  }
  for (int i = 0; i < m; i++) ans[cnt[i]]++;
  for (int i = 0; i < 9; i++) cout << ans[i] << " ";
  return 0;
}
