Pagini recente » Cod sursa (job #390938) | Cod sursa (job #646680) | Cod sursa (job #1496351) | Cod sursa (job #2322497) | Cod sursa (job #833562)
Cod sursa(job #833562)
#include<fstream>
#include<vector>
#define Nmax 100100
#define Mmax 500500
using namespace std;
ifstream in("ciclueuler.in"); ofstream out("ciclueuler.out");
int n,m,x[Mmax],y[Mmax], sol[Mmax],nr;
bool viz[Mmax];
vector <int> g[Nmax];
inline void citire(){ in>>n>>m; for(int i=1;i<=m;++i) { in>>x[i]>>y[i]; g[x[i]].push_back(i); g[y[i]].push_back(i);}}
inline bool eulerian(){
for(int i=1;i<=n;++i)
if(g[i].size()%2)
return false;
return true;
}
inline void euler(int nod){
vector<int> ::iterator it=g[nod].begin(), sf=g[nod].end();
for(;it!=sf;++it){
if(!viz[*it]){
viz[*it]=1;
euler(x[*it]+y[*it]-nod);
}
}
sol[++nr]=nod;
}
int main(){ citire(); if(eulerian()){ euler(1); for(int i=1;i<=nr;++i) out<<sol[i]<<' '; out<<'\n';}
else out<<"-1"<<'\n';
out.close();
return 0;
}