#include <bits/stdc++.h>   using namespace std;   struct Q {     int r, c, id;   } q[100001];   int m, n;   bool cmph(Q a, Q b) {     if (a.r != b.r) return a.r < b.r;     return a.c < b.c;   }   bool cmps(Q a, Q b) {     if (a.c != b.c) return a.c < b.c;     return a.r < b.r;   }   bool cmpp(Q a, Q b) {     if (a.r + a.c != b.r + b.c) return a.r + a.c < b.r + b.c;     return a.r < b.r;   }   bool cmpn(Q a, Q b) {     if (a.r - a.c != b.r - b.c) return a.r - a.c < b.r - b.c;     return a.r < b.r;   }   int cnt[100001];   int main(int argc, char *argv[]) {     scanf( %d%d , &m, &n);     do {       memset(cnt, 0, sizeof(cnt));     } while (0);     for (int i = 0; i < n; i++) {       scanf( %d%d , &(q[i].r), &(q[i].c));       q[i].id = i;     }     sort(q, q + n, cmph);     for (int i = 1; i < n; i++) {       if (q[i - 1].r == q[i].r) {         cnt[q[i - 1].id]++;         cnt[q[i].id]++;       }     }     sort(q, q + n, cmps);     for (int i = 1; i < n; i++) {       if (q[i - 1].c == q[i].c) {         cnt[q[i - 1].id]++;         cnt[q[i].id]++;       }     }     sort(q, q + n, cmpp);     for (int i = 1; i < n; i++) {       if (q[i - 1].r + q[i - 1].c == q[i].r + q[i].c) {         cnt[q[i - 1].id]++;         cnt[q[i].id]++;       }     }     sort(q, q + n, cmpn);     for (int i = 1; i < n; i++) {       if (q[i - 1].r - q[i - 1].c == q[i].r - q[i].c) {         cnt[q[i - 1].id]++;         cnt[q[i].id]++;       }     }     int cc[9];     do {       memset(cc, 0, sizeof(cc));     } while (0);     for (int i = 0; i < n; i++) cc[cnt[i]]++;     for (int i = 0; i < 9; i++) {       printf( %d  , cc[i]);     }     return EXIT_SUCCESS;   }   