Pagini recente » Cod sursa (job #2232402) | Cod sursa (job #2133597) | Cod sursa (job #671761) | Cod sursa (job #1361965) | Cod sursa (job #2539476)
#include <bits/stdc++.h>
#define DIM 100010
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,i,a,b,ok;
vector < pair<int,int> >L[DIM];
stack<int> S;
int out[DIM];
bitset<500010>F;
bitset<DIM> f;
void dfs(int nod){
f[nod]=1;
for(int i=0;i<L[nod].size();i++){
int vecin=L[nod][i].first;
if(!f[vecin])
dfs(vecin);
}
}
int main(){
fin>>n>>m;
for(i=1;i<=m;i++){
fin>>a>>b;
L[a].push_back({b,i});
L[b].push_back({a,i});
out[a]++;
out[b]++;
}
for(i=0;i<=n;i++){
if(out[i]){
S.push(i);
dfs(i);
break;
}
}
for(i=0;i<=n;i++)
if(out[i]%2==1 || (out[i] && !f[i])){
fout<<-1;
return 0;
}
while(!S.empty()){
int nod=S.top();
if(!out[nod]){
if(ok)
fout<<nod<<" ";
ok=1;
S.pop();
continue;
}
while(F[L[nod][L[nod].size()-1].second])
L[nod].pop_back();
F[L[nod][L[nod].size()-1].second]=1;
int vecin=L[nod][L[nod].size()-1].first;
out[nod]--;
out[vecin]--;
S.push(vecin);
}
return 0;
}