Pagini recente » Cod sursa (job #3134603) | Cod sursa (job #3121903) | Cod sursa (job #2243097) | Cod sursa (job #3121902) | Cod sursa (job #2462851)
#include <bits/stdc++.h>
using namespace std;
const int NMax = 100005;
int n,m,top,ctc_nr,x,y;
int viz[NMax],grad[NMax];
multiset<int> G[NMax];
stack<int> st;
int main(){
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
cin >> n >> m;
for(int i = 1; i <= m; ++i){
cin >> x >> y;
G[x].insert(y);
G[y].insert(x);
grad[x]++;
grad[y]++;
}
for(int i = 1; i <= n; ++i){
if(grad[i] % 2 != 0){
cout << -1 << '\n';
return 0;
}
}
st.push(1);
int nr = 0;
while(!st.empty()){
int curr = st.top();
if(G[curr].size() == 0){
if(nr++ >= m){
return 0;
}
cout << curr << ' ';
st.pop();
}else{
int nei = (*G[curr].begin());
auto nei_iter = G[curr].begin();
G[curr].erase(nei_iter);
auto curr_iter_in_nei = G[nei].find(curr);
G[nei].erase(curr_iter_in_nei);
st.push(nei);
}
}
return 0;
}