Pagini recente » Cod sursa (job #755799) | Cod sursa (job #3138247) | Cod sursa (job #2843063) | Cod sursa (job #213874) | Cod sursa (job #932440)
Cod sursa(job #932440)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream cin("ciclueuler.in"); ofstream cout("ciclueuler.out");
struct pos{
int x;
vector<int>::iterator it;
};
typedef vector<int>::iterator iterator;
vector <int> v[100005];
int par[100005];
stack <pos> stk;
pos p;
vector<int>::iterator it;
int i, j, n, m, x, y, temp;
bool flg;
void del(vector<int> fv, int target){
for (vector<int>::iterator fit=fv.begin();fit!=fv.end();fit++)
if ((*fit)==target){
*fit=0;
return;
}
}
int main(){
cin>>n>>m;
for (i=1; i<=m; i++){
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
par[x]++; par[y]++;
}
for (i=1; i<=n; i++) if (par[i]%2) {
flg=1;
break;
}
if (flg) cout<<-1;
else {
it = v[1].begin(); x=1;
while (it!=v[x].end()){
if ((*it)!=0){
p.x = x; p.it = it;
stk.push(p);
temp=*it;
*it=0;
for (vector<int>::iterator fit=v[temp].begin();fit!=v[temp].end();fit++)
if ((*fit)==x){
*fit=0;
break;
}
x=temp;
it=v[x].begin();
continue;
}
it++;
if (it==v[x].end() && !stk.empty()){
cout<<x<<" ";
x=stk.top().x;
it=stk.top().it;
stk.pop();
}
}
}
}