#include #include #include using namespace std; const int MAXN = 1e5 + 10; // ??1e5???????????????? int parent[MAXN]; // ?????????????1~N // ??????????? int find(int u) { if (parent[u] != u) { parent[u] = find(parent[u]); } return parent[u]; } // ????? void unite(int u, int v) { u = find(u); v = find(v); if (u != v) { parent[v] = u; } } int main() { int N, M; scanf("%d%d", &N, &M); // ?????N???M // ?????????????????? for (int i = 1; i <= N; ++i) { parent[i] = i; } // ??M?????????? for (int i = 0; i < M; ++i) { int u, v; scanf("%d%d", &u, &v); unite(u, v); } // ??????????k????????set??? bool vis[MAXN]; memset(vis, false, sizeof(vis)); // ????????false int k = 0; for (int i = 1; i <= N; ++i) { int root = find(i); if (!vis[root]) { // ?????????????????? k++; vis[root] = true; } } // ??1~N???i????? for (int i = 1; i <= N; ++i) { if (i > k) { printf("-1 "); // ??????-1 } else { printf("%d ", k - i); // ??????????? } } return 0; }