#include<bits/stdc++.h>
#define MAXM 40000
using namespace std;
struct times{
int a_times,b_times,c_times,d_times;
};
struct node{
int val;
int num;
};
node magic[MAXM];
int n,m;
namespace get_35pts{
times ans[MAXM];
bool cmp(node a,node b){
return a.val<b.val;
}
void main(){
sort(magic+1,magic+m+1,cmp);
// cout<<"--------------------------------"<<endl;
// for(int i=1;i<=m;i++){
// cout<<magic[i].num<<" "<<magic[i].val<<endl;
// }
for(register int a=1;a<=m;a++){
for(register int b=a+1;b<=m;b++){
for(register int c=b+1;c<=m;c++){
for(register int d=c+1;d<=m;d++){
int dif1,dif2,dif3;
dif1=magic[b].val-magic[a].val;
dif2=magic[d].val-magic[c].val;
dif3=magic[c].val-magic[b].val;
if(!(dif1&&dif2&&dif3)) continue;
// cout<<"---------------------------"<<endl;
// cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
// cout<<magic[a].num<<" "<<magic[b].num<<" "<<magic[c].num<<" "<<magic[d].num<<endl;
// cout<<dif1<<" "<<dif2<<" "<<dif3<<endl;
if(dif1*3<dif3&&dif1==2*dif2){
// cout<<"-------------------"<<endl;
// cout<<magic[a].val<<" "<<magic[b].val<<" "<<magic[c].val<<" "<<magic[d].val<<endl;
ans[magic[a].num].a_times++;
ans[magic[b].num].b_times++;
ans[magic[c].num].c_times++;
ans[magic[d].num].d_times++;
}
}
}
}
}
for(register int i=1;i<=m;i++){
printf("%d %d %d %d\n",ans[magic[i].val].a_times,ans[magic[i].val].b_times,ans[magic[i].val].c_times,ans[magic[i].val].d_times);
}
}
}
namespace strenge_things{
times ans[MAXM];
int vis[MAXM];
void main(){
// sort(magic+1,magic+m+1,cmp);
// cout<<"--------------------------------"<<endl;
// for(int i=1;i<=m;i++){
// cout<<magic[i].num<<" "<<magic[i].val<<endl;
// }
for(int i=1;i<=m;i++){
vis[magic[i].val]++;
}
for(register int a=1;a<=n;a++){
if(!vis[a]) continue;
for(register int b=a+1;b<=n;b++){
if(!vis[b]) continue;
for(register int c=b+1;c<=n;c++){
if(!vis[c]) continue;
if((b-a+2*c)%2) continue;
int d=(b-a+2*c)/2;
int dif1=b-a,dif2=c-b;
if(dif1*3<dif2){
ans[a].a_times+=vis[b]*vis[c]*vis[d];
ans[b].b_times+=vis[a]*vis[c]*vis[d];
ans[c].c_times+=vis[a]*vis[b]*vis[d];
ans[d].d_times+=vis[a]*vis[b]*vis[c];
}
// for(register int d=c+1;d<=n;d++){
// if(!vis[d]) continue;
// int dif1,dif2,dif3;
// dif1=b-a;
// dif2=d-c;
// dif3=c-b;
// // cout<<"---------------------------"<<endl;
// // cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
// // cout<<magic[a].num<<" "<<magic[b].num<<" "<<magic[c].num<<" "<<magic[d].num<<endl;
// // cout<<dif1<<" "<<dif2<<" "<<dif3<<endl;
// if(dif1*3<dif3&&dif1==2*dif2){
// ans[a].a_times+=vis[b]*vis[c]*vis[d];
// ans[b].b_times+=vis[a]*vis[c]*vis[d];
// ans[c].c_times+=vis[a]*vis[b]*vis[d];
// ans[d].d_times+=vis[a]*vis[b]*vis[c];
// }
// }
}
}
}
for(register int i=1;i<=m;i++){
printf("%d %d %d %d\n",ans[magic[i].val].a_times,ans[magic[i].val].b_times,ans[magic[i].val].c_times,ans[magic[i].val].d_times);
}
}
}
int main(){
scanf("%d%d",&n,&m);
for(register int i=1;i<=m;i++){
scanf("%d",&magic[i].val);
magic[i].num=i;
}
strenge_things::main();
return 0;
}
/*
test #1:
input:
30 8
1
24
7
28
5
29
26
24
output:
4 0 0 0
0 0 1 0
0 2 0 0
0 0 1 1
1 3 0 0
0 0 0 2
0 0 2 2
0 0 1 0
--------------------------
test #2:
input:
15 15
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
output:
5 0 0 0
4 0 0 0
3 5 0 0
2 4 0 0
1 3 0 0
0 2 0 0
0 1 0 0
0 0 0 0
0 0 0 0
0 0 1 0
0 0 2 1
0 0 3 2
0 0 4 3
0 0 5 4
0 0 0 5
*/