#include #include #include #include using namespace std ; vector g[20001] ; set ans ; bool used[20001] ; int tin[20001] , fup[20001] , timer ; void dfs(int v, int p = -1) { used[v] = 1 ; tin[v]=fup[v]=timer ,++timer ; int children = 0 ; for(int i = 0 ; i < g[v].size() ; ++i) { int u = g[v][i] ; if(u==p) continue ; if(used[u]) fup[v]=min(fup[v],tin[u]) ; else { dfs(u,v) ; fup[v] = min(fup[v],fup[u]) ; if(tin[v]<=fup[u]&&p!=-1) { ans.insert(v) ; } ++children ; } } if(children>1&&p==-1) { ans.insert(v) ; } } int main() { freopen("points.in","r",stdin) ; freopen("points.out","w",stdout) ; int n , m ; cin >> n >> m ; for(int i = 0 ; i < m ; ++i) { int l , r ; cin >> l >> r ; g[l].push_back(r) ; g[r].push_back(l) ; } for(int i = 1 ; i <= n ; ++i) if(!used[i]) dfs(i) ; cout << ans.size() << '\n' ; for (std::set::iterator i= ans.begin() ; i != ans.end() ; ++i) { cout << (*i) << ' ' ; } }