Pagini recente » Cod sursa (job #1067534) | Cod sursa (job #2920361) | Cod sursa (job #1099657) | Cod sursa (job #316655) | Cod sursa (job #2252242)
#include <cstdio>
#include <vector>
#include <stack>
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100005
int Grad[ NMAX ];
stack < int > Q;
vector < list < int > > V(NMAX );
void stergere ( int x, int y ) {
Grad[ x ]--; Grad[ y ]--;
V[ x ].erase( find( V[ x ].begin(), V[ x ].end(), y ) );
V[ y ].erase( find( V[ y ].begin(), V[ y ].end(), x ) );
}
int main () {
freopen( "ciclueuler.in", "r", stdin );
freopen( "ciclueuler.out", "w", stdout );
int n, m, i, j, x, y, nod, fiu;
scanf( "%d%d", &n,&m );
while ( m-- ) {
scanf( "%d%d", &x,&y );
V[ x ].push_front( y );
V[ y ].push_front( x );
Grad[ x ]++; Grad[ y ]++;
}
for ( i = 1; i <= n; ++i ) {
if ( Grad[ i ] % 2 ) {
printf( "-1\n" );
return 0;
}
}
Q.push( 1 );
while ( !Q.empty() ) {
nod = Q.top();
if ( Grad[ nod ] == 0 ) {
if( Q.size() > 1 ) printf( "%d ", nod );
Q.pop();
} else {
fiu = V[ nod ].front();
Q.push( fiu );
stergere( nod, fiu );
}
}
return 0;
}