Pagini recente » Anamaria | Cod sursa (job #307440) | Cod sursa (job #1531189) | Cod sursa (job #1523897) | Cod sursa (job #984945)
Cod sursa(job #984945)
#include <fstream>
#include <list>
#include <queue>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int main()
{
int n,m;
list<int> li[100001];
f>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
f>>x>>y;
li[y].push_back(x);
li[x].push_back(y);
}
bool ok[100001]={};
queue<int> q;
q.push(1);
ok[1]=1;
while(!q.empty()){
int x=q.front();
q.pop();
for(list<int>::iterator it=li[x].begin();it!=li[x].end();it++)
if(!ok[*it]){
q.push(*it);
ok[*it]=1;
}
}
for(int i=1;i<=n;i++)
if(li[i].size()%2||!ok[i]){
g<<-1;
return 0;
}
stack<int> st;
vector<int> sl;
st.push(1);
while(!st.empty()){
int x=st.top();
st.pop();
while(true){
if(li[x].empty())
break;
int ax=li[x].front();
li[x].pop_front();
for(list<int>::iterator it=li[ax].begin();;it++)
if(*it==x){
li[ax].erase(it);
break;
}
st.push(x);
x=ax;
}
sl.push_back(x);
}
for(unsigned j=0;j<sl.size()-1;j++)
g<<sl[j]<<" ";
return 0;
}