#include <stdio.h>
#include <queue>
#include <vector>
#include <iostream>

using namespace std;
int peoplesz;
int linksz;
void queuefunc(int n);
int cnt[101][101];
int minv[101][101];
vector<int> link[101];
int isgroup[101];
vector<int> group[101];
int groupn;
int total [101];
bool islink[101][101];
int main(void) {
    FILE *rt = fopen("input.txt","rt");
    FILE *wt = fopen("output.txt","wt");
    fscanf(rt,"%d\n%d\n",&peoplesz,&linksz);
    for(int i = 0; i<101; i++) {
        for(int j = 0; j<101; j++) {
            minv[i][j] = 1000000000;
            cnt[i][j] = 100000000;
        }
    }
    for(int i = 0; i<linksz; i++) {
        int n1,n2;
        fscanf(rt,"%d %d\n",&n1,&n2);
        islink[n1][n2] = true;
        islink[n2][n1] = true;
        link[n1].push_back(n2);
        link[n2].push_back(n1);
    }
    for(int i = 1; i<=peoplesz; i++) {
        queuefunc(i);
    }
    for(int i = 1; i<=peoplesz; i++) {
        for(int j = 1; j<=peoplesz; j++) {
            total[i] += (minv[i][j] == 1000000000 ? 0 : minv[i][j]);
        }
    }
    fprintf(wt,"%d\n",groupn);
    for(int i = 1; i<=groupn; i++) {
        vector<int> v;
        int min = 2147483647;
        for(int j = 0; j<group[i].size(); j++) {
            if(total[group[i][j]] < min) {
                v.clear();
                v.push_back(group[i][j]);
                min = total[group[i][j]];
            }else if(total[group[i][j]] == min){
                v.push_back(group[i][j]);
            }
        }
        if(v.size() > 1) {
            min = 10000000000;
            for(int j = 0; j<v.size() ;j++) {
                if(min > v[j]) {
                    min = v[j];
                }
            }
            fprintf(wt,"%d\n",min);
        }else {
            fprintf(wt,"%d\n",v[0]);
        }
    }

}
void queuefunc(int n) {
    queue<int> next;
    next.push(n);
    int groupnum = (isgroup[n] == 0 ? ++groupn:isgroup[n]);
    if(groupnum != isgroup[n]) {
        group[groupnum].push_back(n);
    }
    isgroup[n] = groupnum;
    minv[n][n] = 1000000000;
    cnt[n][n] = 0;
    while(!next.empty()) {
        int m = next.front();
        next.pop();
        if(isgroup[m] == 0) {
            isgroup[m] = groupnum;
            group[groupnum].push_back(m);
        }

        for(int i = 0; i<link[m].size(); i++) {
            if(cnt[n][link[m][i]] > cnt[n][m]+1){
                cnt[n][link[m][i]] = cnt[n][m]+1;

                next.push(link[m][i]);
                minv[n][link[m][i]] = cnt[n][m]+1;
            }
        }
    }
}

 

4,5번은 틀리다고 나오네요...ㅜㅜ