Pagini recente » Cod sursa (job #2123346) | Cod sursa (job #2231544) | Cod sursa (job #723353) | Cod sursa (job #1878761) | Cod sursa (job #1070244)
#include <stdio.h>
#include <list>
#include<vector>
#include <stack>
#define pb push_back
#define TR( C, it ) \
for( list<int>::iterator it = C.begin(); it != C.end(); it++ )
using namespace std;
const int nmax = 108000;
list <int> a[nmax];
vector <int> sol;
stack <int> C;
int n,m,parc[nmax];
void dfs(int nod){
parc[nod]=1;
//for(int i=0;i<a[nod].size();i++)
int it;
// for( typeof(a[nod].begin()) it = a[nod].begin(); it != a[nod].end(); it++ )
TR(a[nod],it)
if(parc[*it]!=1)dfs(*it);
}
int eulerian(){
dfs(1);
for(int i=1;i<=n;i++)
{
if( parc[i]!=1) return 0;
if(a[i].size()%2==1)return 0;
}
return 1;
}
void parcurgere(int nod){
//for( typeof(a[nod].begin()) it = a[nod].begin(); it != a[nod].end(); it++ ){
int it1 = a[nod].back();
C.push(it1);
a[nod].pop_back();
// for( typeof(a[it].begin()) ib = a[it].begin(); ib != a[it].end(); ib++ )
TR(a[it1],ib)
if(*ib==nod){
a[it1].erase(ib); break;
}
// }
}
void rez(){
if(eulerian()){
C.push(1);
int w;
do{
w = C.top();
C.pop();
if(!a[w].empty()){
sol.pb(w);
parcurgere(w);
}
}while(!C.empty());
}else sol.pb(-1);
}
int main(){
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d%d",&n,&m);
int x,y;
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
a[x].pb(y);
//if(y!=x)
a[y].pb(x);
}
rez();
for(int i=0;i<sol.size();i++)
printf("%d ", sol[i]);
fclose(stdout); fclose(stdin);
return 0;
}