#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, k = 0;
vector<int> odp;
vector<pair<int, int> > st2;
set<int> d[200001];
set<int> u;
void DFS(int v) {
  u.erase(v);
  odp[k]++;
  int c = -1;
  set<int>::iterator it = u.upper_bound(c);
  while (it != u.end()) {
    c = *it;
    if (!d[v].count(c)) DFS(c);
    it = u.upper_bound(c);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    cin >> x >> y;
    d[x].insert(y);
    d[y].insert(x);
  }
  for (int i = 1; i <= n; i++) u.insert(i);
  for (int i = 1; i <= n; i++) {
    if (u.count(i)) {
      odp.push_back(0);
      DFS(i);
      k++;
    }
  }
  sort(odp.begin(), odp.end());
  cout << odp.size() << endl;
  for (int i = 0; i < odp.size(); i++) cout << odp[i] << " ";
  return 0;
}
