Pagini recente » Cod sursa (job #1525993) | Cod sursa (job #2461114) | Cod sursa (job #45969) | Cod sursa (job #2731248) | Cod sursa (job #3226450)
#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;
for(auto it : L[nod])
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() % 2)
return false;
return true;
}
void dfs(int nod) {
for(auto it : L[nod])
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;
}