Pagini recente » Borderou de evaluare (job #2102915) | Borderou de evaluare (job #866314) | Borderou de evaluare (job #295148) | Borderou de evaluare (job #1154993) | Cod sursa (job #1970291)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
stack<int> s;
vector<int> a[100005],sol;
int n,m,to[500005],from[500005];
bool v[500005];
int main(){
int i,h,j,q,w,k;
fin>>n>>m;
for(h=1;h<=m;h++){
fin>>i>>j;
a[i].push_back(h);
a[j].push_back(h);
from[h]=i;
to[h]=j;
}
for(i=1;i<=n;i++)
if(a[i].size()%2==1){
fout<<-1;
return 0;
}
s.push(1);
while(!s.empty()){
k=s.top();
if(!a[k].empty()){
w=a[k].back();
a[k].pop_back();
if(!v[w]){
v[w]=1;
if(to[w]!=k)
q=to[w];
else
q=from[w];
s.push(q);
}
continue;
}
sol.push_back(k);
s.pop();
}
for(i=0;i<sol.size()-1;i++)
fout<<sol[i]<<" ";
return 0;
}