#include <iostream>
using namespace std;
int f[100];
int getf(int v){
if(f[v] == v){
return v;
}else {
f[v] = getf(f[v]);
return f[v];
}
}
void merge(int u, int v){
int t1 = getf(u);
int t2 = getf(v);
if(t1 != t2){
f[t2] = t1;
}
return ;
}
int main(){
int n, m;//n个顶点,m条信息
int sum = 0;
cin>>n>>m;
//初始化
for(int i=1; i<=n; i++){
f[i] = i;
}
int tx, ty;
for(int i=1; i<=m; i++){
cin>>tx>>ty;
merge(tx, ty);
}
for(int i=1; i<=n; i++){
if(f[i] == i){
sum++;
cout<<i<<' ';
}
}
cout<<endl<<sum<<endl;
return 0;
}
/*测试数据
10 9
1 2
3 4
5 2
4 6
2 6
8 7
9 7
1 6
2 4
*/