Pagini recente » Cod sursa (job #2521313) | Cod sursa (job #1543579) | Cod sursa (job #2629841) | Cod sursa (job #1049057) | Cod sursa (job #1547974)
#include<cstdio>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
int grad[100010];
bool seen[500010];
struct edge{int node,index;};
vector<edge> g[100010];
stack<int> s;
void euler() {
int nod,fiu;
s.push(1);
while(!s.empty()){
nod=s.top();
while(!g[nod].empty()&&seen[g[nod].back().index]==true)
g[nod].pop_back();
if(!g[nod].empty()){
fiu=g[nod].back().node;
s.push(fiu);
seen[g[nod].back().index]=true;
g[nod].pop_back();
}
else{
if(s.size()>1)
printf("%d ",nod);
s.pop();
}
}
}
int main(){
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
int n,m,i,a,b;
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++) {
scanf("%d%d",&a,&b);
g[a].push_back({b, i});
g[b].push_back({a, i});
grad[a]++;
grad[b]++;
}
for(i=1;i<=n;i++)
if(grad[i]%2==1){
printf("-1");
return 0;
}
euler();
return 0;
}