#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int maxx = 1005;
int dfn[maxx],low[maxx],flag[maxx],sign[maxx];
vector<int> v[maxx];
int cnt = 0,ans = 0,root;
void tarjan(int x,int pre)
{
int child = 0;
flag[x] = 1;
low[x] = dfn[x] = ++cnt;
for(int i=0;i<v[x].size();i++){
int now = v[x][i];
if(!flag[now]){
child++;
tarjan(now , x);
low[x] = min(low[x] , low[now]);
if(x != root && low[x] >= dfn[x]){
sign[x] = 1,ans++;
}
if(x == root && child >= 2){
sign[x] = 1,ans++;
}
}
else if(pre != now){
low[x] = min(low[x],dfn[now]);
}
}
}
int main()
{
int n,m,x,y;
cin>>n>>m;
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(flag,0,sizeof(flag));
for(int i=1;i<=m;i++){
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
for(int i=1;i<=n;i++){
root = i;
if(!dfn[i])
tarjan(i , -1);
}
printf("割点的个数是:%d\n",ans);
for(int i=1;i<=n;i++){
if(sign[i] == 1){
cout<<i<<" ";
}
}
return 0;
}