Pagini recente » Cod sursa (job #1071009) | Clasament ne-auzim | Cod sursa (job #1150736) | Cod sursa (job #906955) | Cod sursa (job #1307070)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <bitset>
#define FIN "ciclueuler.in"
#define FOUT "ciclueuler.out"
#define NMAX 500009
using namespace std;
vector<int> G[ NMAX ];
stack<int> STACK;
int le[ NMAX ],
ri[ NMAX ],
sol[ NMAX ],
num_nodes,
num_edges,
i,
x,
y;
bitset<NMAX> vis;
//prototypes
void read();
int solve();
bool euler();
int main() {
read();
solve();
return(0);
};
void read() {
freopen(FIN, "r", stdin);
scanf("%d %d", &num_nodes, &num_edges);
for(i = 1; i <= num_edges; i++) {
scanf("%d %d", &le[ i ], &ri[ i ]);
x = le[ i ];
y = ri[ i ];
G[ x ].push_back( i );
G[ y ].push_back( i );
}
fclose( stdin );
};
bool euler() {
for(i = 1; i <= num_nodes; i++) {
if(G[ i ].size() & 1) {
return 0;
}
}
return 1;
};
void dfs(int node) {
for(vector<int>::iterator it = G[node].begin(); it != G[ node ].end(); ++it) {
if(!vis[ *it ]) {
vis[ *it ] = 1;
dfs(le[ *it ] + ri[ *it ] - node);
}
}
sol[++sol[0]] = node;
};
int solve() {
freopen(FOUT, "w", stdout);
if( !euler() ) {
printf("-1");
return 0;
}
dfs(1);
for(i = 1; i <= sol[0]; i++) printf("%d ", sol[ i ]);
fclose( stdout );
return 1;
};