/*
求补图的联通分量个数以及长度
思路:
记录不连通边,bfs起点,相连的就读入计数,点集合删除
一直到点集合为空,over
用时:36min
*/
#include<bits/stdc++.h>
using namespace std;
const int N=200005;
int n,m;
map<int,bool>mp[N];
vector<int>node,ans;
int bfs(int st)
{
int cnt=0;
queue<int>q;
q.push(st);
while(!q.empty())
{
int u=q.front();
q.pop();
cnt++;
for(int i=0;i<node.size();i++)
{
int v=node[i];
if(!mp[u][v])
{
swap(node[i],node.back());
node.pop_back();
i--;
q.push(v);
}
}
}
return cnt;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
node.push_back(i);
for(int i=1;i<=m;i++)
{
int u,v;
scanf("%d%d",&u,&v);
mp[u][v]=1;
mp[v][u]=1;
}
while(!node.empty())
{
int st=node.back();
node.pop_back();
int num=bfs(st);
if(num)
ans.push_back(num);
}
sort(ans.begin(),ans.end());
printf("%d\n",ans.size());
for(int i=0;i<ans.size();i++)
printf("%d%c",ans[i],i==ans.size()-1?'\n':' ');
}