#include <bits/stdc++.h>
using namespace std;
const int N = 40009;
namespace IO {
template<class T>
inline void read(T &x) {
int tag = 1;
x = 0;
char ch = getchar();
while(ch < '0' || ch > '9') {
if(ch == '-') tag = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9') {
x = x * 10 + ch - '0';
ch = getchar();
}
x = x * tag;
}
template<class T>
inline void print(T &x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x == 0) {
putchar(48);
return;
}
int len = 0,tag[50];
while(x > 0) {
tag[++len] = x % 10;
x /= 10;
}
for(int i = len;i >= 1;i--) putchar(tag[i] + 48);
}
}; using namespace IO;
int n,m,val[N];
int len,t[N],maxn,minn;
struct node {
int a,b,c,d;
}ans[N];
int main() {
read(n);read(m);minn = n;
for(int i = 1;i <= m;i++) {
read(val[i]);
t[val[i]]++;
maxn = max(maxn,val[i]);
minn = min(minn,val[i]);
}
for(int i = minn;i <= maxn - 3;i++) {
if(!t[i]) continue;
for(int j = i + 1;j <= maxn - 2;j++) {
if(!t[j]) continue;
for(int k = j + 1;k <= maxn - 1;k++) {
int p = (j - i + (k << 1));
// printf("%d %d %d %d\n",i,j,k,p >> 1);
if(!t[k] || !t[p >> 1]) continue;
if(p & 1) continue;
if((j - i) * 3 < k - j) {
int tmp1 = t[j] * t[k] * t[p >> 1];
int tmp2 = t[i] * t[k] * t[p >> 1];
int tmp3 = t[i] * t[j] * t[p >> 1];
int tmp4 = t[i] * t[j] * t[k];
ans[i].a += tmp1;ans[j].b += tmp2;
ans[k].c += tmp3;ans[p >> 1].d += tmp4;
}
}
}
}
for(int i = 1;i <= m;i++) {
print(ans[val[i]].a);putchar(' ');
print(ans[val[i]].b);putchar(' ');
print(ans[val[i]].c);putchar(' ');
print(ans[val[i]].d);putchar(' ');puts("");
// printf("%d %d %d %d\n",ans[val[i]].a,ans[val[i]].b,ans[val[i]].c,ans[val[i]].d);
}
return 0;
}
IO没有任何问题,求调