Pagini recente » Cod sursa (job #1934727) | Cod sursa (job #2936760) | Cod sursa (job #812820) | Cod sursa (job #3239764) | Cod sursa (job #1244463)
#include <cstdio>
#include <stack>
#include <vector>
#define nmv 100020
#include <queue>
using namespace std;
queue <long> sta;
vector <int> graph[nmv];
stack <long> head,tail;
long degree[nmv];
int visitated[nmv];
long n,m;
bool eulerian(){
sta.push(1);
visitated[1]=1;
long p;
while(!sta.empty()){
p=sta.front();
sta.pop();
for(vector <int> :: iterator it=graph[p].begin();it!=graph[p].end();++it){
if(!visitated[*it]){
sta.push(*it);
visitated[*it]=1;
}
}
}
for(p=1;p<=n;p++)
if((!visitated[p])||(degree[p]%2))
return 0;
return 1;
}
void euler(){
long u,v;
head.push(1);
vector <int> :: iterator it;
while(!head.empty()){
while(degree[head.top()]>0){
u=head.top();
v=graph[u].back();
graph[u].pop_back();degree[u]--;
for(it=graph[v].begin();(*it)!=u;++it);
graph[v].erase(it);
degree[v]--;
head.push(v);
}
while(!head.empty() && degree[head.top()]==0){
u=head.top();
head.pop();
tail.push(u);
}
}
while(!tail.empty()){
printf("%d ", tail.top());
tail.pop();
}
}
void solve(){
if(eulerian()){
euler();
return;
}
printf("-1\n");
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%ld %ld ",&n,&m);
long x,y;
while(m--){
scanf("%ld %ld",&x,&y);
graph[x].push_back(y);degree[x]++;
graph[y].push_back(x);degree[y]++;
}
solve();
return 0;
}