Pagini recente » preojiiiiii | Cod sursa (job #2224475) | Cod sursa (job #2829507) | Cod sursa (job #1901066) | Cod sursa (job #1051138)
#include <cstdio>
#include <stack>
#include <vector>
using namespace std;
stack <int> stk;
vector <int> v[100005];
vector <int> :: iterator it;
int deg[100005];
int n,m;
inline bool eulerian() {
for (int i=1;i<=n;i++) if (deg[i]%2 != 0) return false;
return true;
}
inline void euler(int start) {
stk.push(start);
while (!stk.empty()) {
int nod = stk.top();
if (deg[nod] <= 0) {
stk.pop();
if (!stk.empty()) printf("%d ",nod);
} else {
int muc = v[nod].back(); v[nod].pop_back();
deg[muc]--; deg[nod]--;
for (it=v[muc].begin();it!=v[muc].end();it++) if (*it == nod) {
v[muc].erase(it);
break;
}
stk.push(muc);
}
}
}
int main() {
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
for (int i=1;i<=m;i++) {
int a,b;
scanf("%d %d",&a,&b);
deg[a]++; deg[b]++;
v[a].push_back(b);
v[b].push_back(a);
}
if (!eulerian()) printf("-1\n");
else euler(1);
printf("\n");
return 0;
}