Pagini recente » Cod sursa (job #1536104) | Cod sursa (job #2484321) | Cod sursa (job #2122980) | Cod sursa (job #866314) | Cod sursa (job #2573220)
#include <bits/stdc++.h>
#define DIM 100010
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,i,x,y,nod,vecin,muchie,g[DIM];
bitset<5*DIM> f,w;
vector< pair<int,int> > L[DIM];
stack<int> st;
void dfs(int nod) {
f[nod]=1;
for (auto it:L[nod]) {
vecin=it.first;
if (f[vecin]==0)
dfs(vecin);
}
}
int main() {
fin>>n>>m;
for (i=1;i<=m;i++) {
fin>>x>>y;
L[x].push_back({y,i});
L[y].push_back({x,i});
g[x]++, g[y]++;
}
dfs(1);
for (i=1;i<=n;i++) {
if ((g[i]%2==1)||(g[i]!=0&&f[i]==0)) {
fout<<"-1";
return 0;
}
}
st.push(1);
while (!st.empty()) {
nod=st.top();
if (g[nod]==0) {
if (st.size()!=1)
fout<<nod<<" ";
st.pop();
continue;
}
while (w[L[nod].back().second]==1)
L[nod].pop_back();
vecin=L[nod].back().first;
muchie=L[nod].back().second;
L[nod].pop_back();
st.push(vecin);
g[nod]--, g[vecin]--, w[muchie]=1;
}
return 0;
}