c++
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
constexpr int N=20005;
std::vector<int>g[N];
int dfn[N],low[N],tot;
bool cut[N];
int n,m;
void tarjan(int u, bool root) {
dfn[u] = low[u] = ++tot;
int son = 0;
for (int v : g[u]) {
if (!dfn[v]) {
son++;
tarjan(v, false);
low[u] = min(low[u], low[v]);
if (low[v] >= dfn[u] && (!root || son >= 2)) cut[u] = true;
} else {
low[u] = min(low[u], dfn[v]); // 弃边 dfn[v] > dfn[u] 不影响最小值
}
}
}
void fc() {
std::cin>>n>>m;
for(int i=0;i<m;i++){
int u,v;std:;cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i,true);
std::cout<<std::count(cut+1,cut+n+1,true)<<"\n";
for(int i=1;i<=n;i++){
if(cut[i])std::cout<<i<<" ";
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
//std::cin>>t;
while (t--) fc();
return 0;
}