Pagini recente » Cod sursa (job #1417016) | Cod sursa (job #916609) | Cod sursa (job #3134226) | Cod sursa (job #694130) | Cod sursa (job #2126756)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
const int N = 100002, M = 500002;
bool viz[M];
vector <pair <int,int>> v[N];
stack <int> st;
bool isEuler(int n){
for(int i=1;i<=n;i++)
if(v[i].size() % 2 == 1)
return false;
return true;
}
void solve(int n){
int nod, nbr, ind, sz;
st.push(1);
while(!st.empty()){
nod = st.top();
sz = v[nod].size();
if(sz > 0){
ind = v[nod][sz-1].second;
nbr = v[nod][sz-1].first;
v[nod].pop_back();
if(viz[ind] == false){
viz[ind] = true;
st.push(nbr);
}
}
else{
st.pop();
if(!st.empty())
out<<nod<<" ";
}
}
}
int main()
{
int n,m,x,y;
in>>n>>m;
for(int i=1;i<=m;i++){
in>>x>>y;
v[x].push_back({y,i});
v[y].push_back({x,i});
}
in.close();
if(isEuler(n) == false)
out<<"-1\n";
else
solve(n);
out.close();
return 0;
}