#include <bits/stdc++.h>
using namespace std;
vector < vector < int > > grafo;
vector <int> d, low, parent;
vector<bool> cut, vis;
int tempo = 0, raiz = 0, x = 0;
void dfs(int v){
vis[v] = 1;
int children = 0;
low[v] = d[v] = tempo++;
vector <int> adj = grafo[v];
for(int i = 0; i < adj.size(); i++){
int a = adj[i];
if(!vis[a]){
children++;
parent[a] = v;
dfs(a);
low[v] = min(low[v], low[a]);
//verifica se é vertice de corte
if(parent[v] == 0 && children > 1){
x = 1;
cut[v] = 1;
}
//verifica se é vertice de corte
if(parent[v] != 0 && low[a] >= d[v]){
x = 1;
cut[v] = 1;
}
//verifica se aresta é ponte
if(low[a] > low[v]){
// cout<<v<<" "<<a<<" |";
}
}else if(a != parent[v]){
low[v] = min(low[v], d[a]);
}
}
}
int main() {
int n = 0, m = 0, v1 = 0, v2 = 0, c = 0;
cin>>n>>m;
while(n!= 0 || m != 0){
grafo = vector <vector<int>>(n+1);
d = low = parent = vector<int>(n+1);
cut = vis = vector <bool> (n+1);
while(m--){
cin>>v1>>v2;
grafo[v1].push_back(v2);
grafo[v2].push_back(v1);
}
raiz = 1;
c++;
dfs(1);
cout<<"Teste: "<<c<<endl;
if(x==1){
for(int i = 0; i< cut.size(); i++){
if(cut[i]){
cout<<i<<" ";
}
}
}else{
cout<<"nenhum";
}
cout<<endl<<endl;
x = 0;
cin>>n>>m;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3IgPCB2ZWN0b3IgPCBpbnQgPiA+IGdyYWZvOwoKdmVjdG9yIDxpbnQ+IGQsIGxvdywgcGFyZW50OwoKdmVjdG9yPGJvb2w+IGN1dCwgdmlzOwoKaW50IHRlbXBvID0gMCwgcmFpeiA9IDAsIHggPSAwOwoKdm9pZCBkZnMoaW50IHYpewoJCgl2aXNbdl0gPSAxOwoJCglpbnQgY2hpbGRyZW4gPSAwOwoJCglsb3dbdl0gPSBkW3ZdID0gdGVtcG8rKzsKCQoJdmVjdG9yIDxpbnQ+IGFkaiA9IGdyYWZvW3ZdOwoJCglmb3IoaW50IGkgPSAwOyBpIDwgYWRqLnNpemUoKTsgaSsrKXsKCQlpbnQgYSA9IGFkaltpXTsKCQkKCQlpZighdmlzW2FdKXsKCQkJCgkJCSBjaGlsZHJlbisrOwoJCQkgcGFyZW50W2FdID0gdjsKCQkJIAoJCQkgZGZzKGEpOwoJCQkgCgkJCSBsb3dbdl0gPSBtaW4obG93W3ZdLCBsb3dbYV0pOwoJCQkgCgkJCSAvL3ZlcmlmaWNhIHNlIMOpIHZlcnRpY2UgZGUgY29ydGUKCQkJIGlmKHBhcmVudFt2XSA9PSAwICYmIGNoaWxkcmVuID4gMSl7CgkJCSAJeCA9IDE7CgkJCSAJY3V0W3ZdID0gMTsKCQkJIH0KCQkJIAoJCQkgLy92ZXJpZmljYSBzZSDDqSB2ZXJ0aWNlIGRlIGNvcnRlCgkJCSBpZihwYXJlbnRbdl0gIT0gMCAmJiBsb3dbYV0gPj0gZFt2XSl7CgkJCSAJeCA9IDE7CgkJCSAJY3V0W3ZdID0gMTsKCQkJIH0KCQkJIAoJCQkgLy92ZXJpZmljYSBzZSBhcmVzdGEgw6kgcG9udGUKCQkJIGlmKGxvd1thXSA+IGxvd1t2XSl7CgkJCS8vIAljb3V0PDx2PDwiICI8PGE8PCIgfCI7CgkJCSB9CgkJCSAKCQl9ZWxzZSBpZihhICE9IHBhcmVudFt2XSl7CgkJCWxvd1t2XSA9IG1pbihsb3dbdl0sIGRbYV0pOwoJCX0KCX0KfQoKaW50IG1haW4oKSB7CgkKCWludCBuID0gMCwgbSA9IDAsIHYxID0gMCwgdjIgPSAwLCBjID0gMDsKCQoJY2luPj5uPj5tOwoJCgl3aGlsZShuIT0gMCB8fCBtICE9IDApewoJCQoJCWdyYWZvID0gdmVjdG9yIDx2ZWN0b3I8aW50Pj4obisxKTsKCQlkID0gbG93ID0gcGFyZW50ID0gdmVjdG9yPGludD4obisxKTsKCQljdXQgPSB2aXMgPSB2ZWN0b3IgPGJvb2w+IChuKzEpOwoJCQoJCXdoaWxlKG0tLSl7CgkJCWNpbj4+djE+PnYyOwoJCQlncmFmb1t2MV0ucHVzaF9iYWNrKHYyKTsKCQkJZ3JhZm9bdjJdLnB1c2hfYmFjayh2MSk7CgkJfQoJCQoJCXJhaXogPSAxOwoJCWMrKzsKCQlkZnMoMSk7CgkJCgkJY291dDw8IlRlc3RlOiAiPDxjPDxlbmRsOwoJCWlmKHg9PTEpewoJCWZvcihpbnQgaSA9IDA7IGk8IGN1dC5zaXplKCk7IGkrKyl7CgkJCWlmKGN1dFtpXSl7CgkJCQljb3V0PDxpPDwiICI7CgkJCX0KCQl9CgkJCgkJfWVsc2V7CgkJCWNvdXQ8PCJuZW5odW0iOwoJCX0KCQljb3V0PDxlbmRsPDxlbmRsOwoJCQoJCXggPSAwOwoJCWNpbj4+bj4+bTsKCX0KCQoJcmV0dXJuIDA7Cn0=