Pagini recente » Cod sursa (job #1553871) | Cod sursa (job #2099892) | Cod sursa (job #2729947) | Cod sursa (job #2142085) | Cod sursa (job #2334493)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
int n, m, i, nod, vecin, k, x, y;
int p[100005], q[500005], f[500005];
vector <pair <int, int> > L[100005];
inline void dfs (int nod){
int vecin;
f[nod]=1;
for(int i=0; i<L[nod].size(); i++){
vecin = L[nod][i].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});
p[x]++, p[y]++;
}
dfs (1);
for (i=1; i<=n; i++){
if (!f[i] || p[i]%2){
fout << -1;
return 0;
}
}
for (i=1; i<=n; i++){
f[i] = 0;
}
q[++k] = 1;
while (k){
nod = q[k];
if (!p[nod]){
if (k != 1){
fout << nod << " ";
}
k--;
continue;
}
while (f[L[nod].back().second] == 1){
L[nod].pop_back();
}
vecin = L[nod].back().first;
q[++k] = vecin;
f[L[nod].back().second] = 1;
L[nod].pop_back();
p[nod]--, p[vecin]--;
}
return 0;
}