#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
const int MAXN = 2e4+10;
void tomin(int& x,int y){x = min(x,y);}
int n,m;
vector<int>e[MAXN],ans;
int dfn[MAXN],low[MAXN],dtot;
void dfs(int u){
dfn[u] = low[u] = ++dtot;
int flag = 0,deg = 0;
for(auto v : e[u]){
if(!dfn[v]){
deg++;
dfs(v);
flag |= low[v] >= dfn[u];
tomin(low[u],low[v]);
}else tomin(low[u],dfn[v]);
}
if(flag && (fa || deg>1))ans.push_back(u);
}
int main(){
ios::sync_with_stdio(false); cin.tie(0);
cin>>n>>m;
rep(i,1,m){
int u,v; cin>>u>>v;
if(u == v)continue;
e[u].push_back(v); e[v].push_back(u);
}
rep(i,1,n)if(!dfn[i])dfs(i);
sort(ans.begin(),ans.end());
cout<<ans.size()<<"\n";
for(auto u : ans)cout<<u<<" ";
return 0;
}