Pagini recente » Cod sursa (job #488737) | Cod sursa (job #654941) | Cod sursa (job #1119198) | Cod sursa (job #2076370) | Cod sursa (job #2432597)
#include <bits/stdc++.h>
#define MAX (int)(1e5+5)
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n;
bool eulerian,Used[MAX*5];
stack <int> Stk;
vector <int> Ans;
vector <pair <int,int>> Edge[MAX];//first-nod, second-cod_muchie
void read();
void solve();
void print();
int main(){
read();
solve();
if(!eulerian){
fout<<-1;
return 0;
}
print();
return 0;
}
void print(){
for(int i=0;i<Ans.size()-1;++i){
fout<<Ans[i]<<' ';
}
}
void solve(){
int i,x,y,id;
for(i=1;i<=n;++i)
if(Edge[i].size()%2)
return;
Stk.push(1);
while(!Stk.empty()){
x=Stk.top();
while(!Edge[x].empty()&&Used[Edge[x].back().second]){//verific daca mai are muchii valabile
Edge[x].pop_back();
}
if(!Edge[x].empty()){
y=Edge[x].back().first;
id=Edge[x].back().second;
Edge[x].pop_back();
if(!Used[id]){
Used[id]=1;
Stk.push(y);
}
}else{
Ans.push_back(x);
Stk.pop();
}
}
eulerian=1;
}
void read(){
int i,m,x,y;
fin>>n>>m;
for(i=0;i<m;++i){
fin>>x>>y;
Edge[x].push_back(make_pair(y,i));
Edge[y].push_back(make_pair(x,i));
}
}