Pagini recente » Cod sursa (job #1050557) | Cod sursa (job #3253917) | Cod sursa (job #3186153) | Cod sursa (job #1400832) | Cod sursa (job #1581957)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stack>
#include <bitset>
const int DIM = 1 << 17;
using namespace std;
int node2, start, ok; stack <int> Stack;
int NrNodes, NrEdges, node, next_node, node1;
bitset <DIM> Marked; vector <int> Edges[DIM];
void DFS( int node ) {
Marked[node] = 1;
vector <int> :: iterator it;
for( it = Edges[node].begin(); it != Edges[node].end(); it ++ ) {
int next_node = *it;
if( !Marked[next_node] )
DFS( next_node );
}
return;
}
int main () {
freopen( "ciclueuler.in" , "r", stdin );
freopen( "ciclueuler.out", "w", stdout );
scanf( "%d %d", &NrNodes, &NrEdges );
for( int i = 1; i <= NrEdges; i ++ ) {
scanf( "%d %d", &node1, &node2 );
Edges[node1].push_back(node2);
Edges[node2].push_back(node1);
}
for( int i = 1; i <= NrNodes; i ++ ) {
if( Edges[i].size() ) {
start = i;
DFS( i );
break;
}
}
ok = 1;
for( int i = 1; i <= NrNodes; i ++ ) {
if( Edges[i].size() % 2 || ( Edges[i].size() && !Marked[i] )) {
ok = 0;
break;
}
}
if( ok == 0 )
printf( "-1\n" );
else {
Stack.push(start); ok = 0;
while( !Stack.empty() ) {
node = Stack.top();
if( Edges[node].size() ) {
next_node = Edges[node].back();
Stack.push( next_node );
Edges[node].pop_back();
Edges[next_node].erase( find( Edges[next_node].begin(), Edges[next_node].end(), node ));
} else {
if( ok )
printf( "%d ", node );
else
ok = 1;
Stack.pop();
}
}
}
return 0;
}