Pagini recente » Cod sursa (job #470739) | Cod sursa (job #343260) | Cod sursa (job #1360028) | Cod sursa (job #1772067) | Cod sursa (job #2892376)
#include <bits/stdc++.h>
#define MAX_N 100000
#define MAX_M 500000
using namespace std;
bool used[MAX_M];
pair <int, int> edge[MAX_M];
vector <int> edges[MAX_N];
stack <int> s;
vector <int> ans;
int main() {
ifstream cin( "ciclueuler.in" );
ofstream cout( "ciclueuler.out" );
int n, m, e, u, v, i;
cin >> n >> m;
for ( i = 0; i < m; i++ ) {
cin >> u >> v;
u--;
v--;
edge[i] = { u, v };
edges[u].push_back( i );
edges[v].push_back( i );
used[i] = false;
}
u = 0;
while ( u < n && edges[u].size() % 2 == 0 )
u++;
if ( u < n ) {
cout << -1;
return 0;
}
s.push( 0 );
while ( !s.empty() ) {
u = s.top();
if ( edges[u].size() ) {
e = edges[u].back();
edges[u].pop_back();
if ( !used[e] ) {
used[e] = true;
s.push( (u == edge[e].second ? edge[e].first : edge[e].second) );
}
} else {
ans.push_back( u + 1 );
s.pop();
}
}
for ( i = 0; i < ans.size() - 1; i++ )
cout << ans[i] << " ";
return 0;
}