Pagini recente » Cod sursa (job #2064139) | Cod sursa (job #2681265) | Cod sursa (job #1464788) | Cod sursa (job #430747) | Cod sursa (job #3226435)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("ciclueuler.in");
ofstream g ("ciclueuler.out");
const int nmax = 1e6+5, mmax = 5 * nmax;
int n, m, st[mmax], dr[mmax], sol[nmax];
bool viz[mmax], viz2[nmax];
vector <int> L[nmax];
inline void dfs2(int nod){
viz2[nod]=true;
vector <int>::iterator it;
for(it = L[nod].begin(); it != L[nod].end(); ++it)
if(!viz2[st[*it] + dr[*it] - nod])
dfs2(st[*it] + dr[*it] - nod);
}
inline bool conex(){
dfs2(1);
for(int i = 1; i <= n; ++i)
if(!viz2[i])
return false;
return true;
}
bool euler() {
if(!conex()) return false;
for(int i = 1; i <= n; ++i)
if(L[i].size() & 1)
return false;
return true;
}
void dfs(int nod) {
vector <int>::iterator it;
for(it = L[nod].begin(); it != L[nod].end(); ++it)
if(!viz[*it]){
viz[*it] = true;
dfs(st[*it] + dr[*it] - nod);
}
sol[++sol[0]] = nod;
}
int main()
{
f >> n >> m;
for (int i = 1; i <= m; ++i) {
f >> st[i] >> dr[i];
L[st[i]].push_back(i);
L[dr[i]].push_back(i);
}
if(!euler()) g << "-1";
else {
dfs(1);
for(int i = 1;i < sol[0]; ++i) g << sol[i] << " ";
}
return 0;
}