#include <bits/stdc++.h> using namespace std; const int N=100010; int n,m,sum,dfs_clock; vector<int> G[N]; int pre[N],low[N],iscut[N]; int dfs(int u,int fa){ int lowu=pre[u]=++dfs_clock; int child=0; for(int i=0;i<G[u].size();i++){ int v=G[u][i]; if(!pre[v]){ child++; int lowv=dfs(v,u); lowu=min(lowu,lowv); if(lowv>=pre[u])iscut[u]=true; } else if(pre[v]<pre[u] && v!=fa)lowu=min(lowu,pre[v]); } if(child==1 && fa<0)iscut[u]=0; low[u]=lowu; return lowu; } int main(){ scanf("%d%d",&n,&m); while(m--){ int u,v; scanf("%d%d",&u,&v); G[u].push_back(v); G[v].push_back(u); } for(int i=1;i<=n;i++) if(!pre[i])dfs(i,-1); for(int i=1;i<=n;i++)if(iscut[i])sum++; printf("%d ",sum); for(int i=1;i<=n;i++) if(iscut[i])printf("%d ",i); puts(""); return 0; }