Pagini recente » Cod sursa (job #2873348) | Cod sursa (job #1415268) | Cod sursa (job #1838496) | Cod sursa (job #2817659) | Cod sursa (job #1622487)
#include <bits/stdc++.h>
#define dim 500005
#define x first
#define y second
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,i,j,m,grad[dim],viz[dim],Start,Last,nod,a,b,ok;
vector<pair<int,int> > v[dim];
vector <int> sol;
stack <int> st;
void dfs(int nod){
viz[nod]=1;
for(int i = 0 ; i<v[nod].size();i++){
int vecin = v[nod][i].x;
if(viz[vecin]==0){
dfs(vecin);
}
}
}
int main(){
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>a>>b;
v[a].push_back(make_pair(b,i));
v[b].push_back(make_pair(a,i));
grad[a]++;grad[b]++;
}
for(i=1;i<=n;i++){
if(grad[i]!=0){
dfs(i);
Start=i;
break;
}
}
for(i=1;i<=n;i++){
if(grad[i]%2==1 || viz[i]==0){
fout<<-1<<"\n";
return 0;
}
viz[i]=0;
}
st.push(Start);
ok=1;
while(!st.empty()){
nod = st.top();
if(grad[nod]==0){
sol.push_back(nod);
st.pop();
}
else{
Last = v[nod].size()-1;
while(viz[v[nod][Last].y]==1){
v[nod].erase(v[nod].end()-1);
Last = v[nod].size()-1;
}
viz[v[nod][Last].y]=1;
grad[nod]--;
grad[v[nod][Last].x]--;
st.push(v[nod][Last].x);
v[nod].erase(v[nod].end()-1);
}
}
for(i=0;i<sol.size()-1;i++){
fout<<sol[i]<<" ";
}
return 0;
}