#include <bits/stdc++.h>
using namespace std;
int n,k;
vector<int> par;
vector<int> treesize;
vector<int> luu;
int findd(int a)
{
if(a == par[a]) return a;
return par[a] = findd(par[a]);
}
void unionn(int a, int b)
{
a = findd(a);
b = findd(b);
par[a] = b;
treesize[b] += treesize[a];
}
void nhap()
{
cin >> n >> k; n++;
par.resize(n,0);
treesize.resize(n,1);
for(int i = 0; i<n; i++) par[i] = i;
}
void process()
{
luu.resize(n);
for(int i = 0; i<n; i++) luu[i] = i;
int l = 0; int r = n-1;
while(k--){
int val; cin >> val;
if(val!= par[val]) val = findd(val);
int pos = lower_bound(luu.begin() + l, luu.begin() + r + 1, val) - (luu.begin() + l);
if(pos <= (r - l) /2){
pos = l + pos;
for(int i = 1; pos - i >=l; i++) unionn(pos-i, pos+i);
l = pos;
}else{
pos = l + pos;
for(int i = 1; pos + i <=r; i++) unionn(pos +i, pos - i);
r = pos;
}
}
cout << (r - l + 1) << endl;
for(int i = l; i<=r; i++) cout << treesize[i] << ' ';
}
int main()
{
freopen("bando.inp","r",stdin);
freopen("bando.out","w",stdout);
nhap();
process();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmludCBuLGs7Cgp2ZWN0b3I8aW50PiBwYXI7CnZlY3RvcjxpbnQ+IHRyZWVzaXplOwoKdmVjdG9yPGludD4gbHV1OwoKCmludCBmaW5kZChpbnQgYSkKewogICAgaWYoYSA9PSBwYXJbYV0pIHJldHVybiBhOwogICAgcmV0dXJuIHBhclthXSA9IGZpbmRkKHBhclthXSk7Cn0KCnZvaWQgdW5pb25uKGludCBhLCBpbnQgYikKewogICAgYSA9IGZpbmRkKGEpOwogICAgYiA9IGZpbmRkKGIpOwogICAgcGFyW2FdID0gYjsKICAgIHRyZWVzaXplW2JdICs9IHRyZWVzaXplW2FdOwp9CgoKdm9pZCBuaGFwKCkKewogICAgY2luID4+IG4gPj4gazsgbisrOwogICAgcGFyLnJlc2l6ZShuLDApOwogICAgdHJlZXNpemUucmVzaXplKG4sMSk7CiAgICBmb3IoaW50IGkgPSAwOyBpPG47IGkrKykgcGFyW2ldID0gaTsKCn0KCnZvaWQgcHJvY2VzcygpCnsKICAgIGx1dS5yZXNpemUobik7CiAgICBmb3IoaW50IGkgPSAwOyBpPG47IGkrKykgbHV1W2ldID0gaTsKICAgIGludCBsID0gMDsgaW50IHIgPSBuLTE7CiAgICB3aGlsZShrLS0pewogICAgICAgIGludCB2YWw7IGNpbiA+PiB2YWw7CiAgICAgICAgaWYodmFsIT0gcGFyW3ZhbF0pIHZhbCA9IGZpbmRkKHZhbCk7CiAgICAgICAgaW50IHBvcyA9IGxvd2VyX2JvdW5kKGx1dS5iZWdpbigpICsgbCwgbHV1LmJlZ2luKCkgKyByICsgMSwgdmFsKSAtIChsdXUuYmVnaW4oKSArIGwpOwogICAgICAgIGlmKHBvcyA8PSAociAtIGwpIC8yKXsKICAgICAgICAgICAgcG9zID0gbCArIHBvczsKICAgICAgICAgICAgZm9yKGludCBpID0gMTsgcG9zIC0gaSA+PWw7IGkrKykgdW5pb25uKHBvcy1pLCBwb3MraSk7CiAgICAgICAgICAgIGwgPSBwb3M7CiAgICAgICAgfWVsc2V7CiAgICAgICAgICAgIHBvcyA9IGwgKyBwb3M7CiAgICAgICAgICAgIGZvcihpbnQgaSA9IDE7IHBvcyArIGkgPD1yOyBpKyspIHVuaW9ubihwb3MgK2ksIHBvcyAtIGkpOwogICAgICAgICAgICByID0gcG9zOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgKHIgLSBsICsgMSkgPDwgZW5kbDsKICAgIGZvcihpbnQgaSA9IGw7IGk8PXI7IGkrKykgY291dCA8PCB0cmVlc2l6ZVtpXSA8PCAnICc7Cn0KCmludCBtYWluKCkKewogICAgZnJlb3BlbigiYmFuZG8uaW5wIiwiciIsc3RkaW4pOwogICAgZnJlb3BlbigiYmFuZG8ub3V0IiwidyIsc3Rkb3V0KTsKICAgIG5oYXAoKTsKICAgIHByb2Nlc3MoKTsKICAgIHJldHVybiAwOwp9Cg==