Pagini recente » Cod sursa (job #470561) | Cod sursa (job #3000209) | Cod sursa (job #2540608) | Cod sursa (job #446219) | Cod sursa (job #3237880)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ifstream fin( "ciclueuler.in" );
ofstream fout( "ciclueuler.out" );
const int MAXN = 1e5 + 1;
const int MAXM = 5e5 + 1;
struct Edge {
int to, idx;
};
vector<Edge> G[MAXN];
bool off[MAXM], viz[MAXN];
int dfs( int u ) {
int sz = 1;
viz[u] = true;
for ( auto [v, i] : G[u] ) {
if ( !viz[v] ) {
sz += dfs(v);
}
}
return sz;
}
vector<int> cyc;
void build_cycle( int u ) {
vector<int> stk;
stk.push_back(u);
while ( stk.size() ) {
int u = stk.back();
while ( G[u].size() && off[G[u].back().idx] ) {
G[u].pop_back();
}
if ( G[u].size() ) {
off[G[u].back().idx] = true;
stk.push_back(G[u].back().to);
} else {
cyc.push_back(u);
stk.pop_back();
}
}
}
int main() {
ios_base::sync_with_stdio(0);
fin.tie(0);
int n, m, u, v;
fin >> n >> m;
for ( int i = 1; i <= m; ++i ) {
fin >> u >> v;
G[u].push_back({v, i});
G[v].push_back({u, i});
}
bool ok = true;
for ( int i = 1; i <= n; ++i ) ok &= (G[i].size() % 2 == 0);
ok &= (dfs(1) == n);
if ( !ok ) {
fout << "-1\n";
} else {
build_cycle(1);
cyc.pop_back();
for ( auto u : cyc ) fout << u << " ";
}
fin.close();
fout.close();
return 0;
}