Pagini recente » Cod sursa (job #2942901) | Cod sursa (job #1543822) | Cod sursa (job #387903) | Cod sursa (job #1003888) | Cod sursa (job #2360608)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream in ( "ciclueuler.in" );
ofstream out ( "ciclueuler.out" );
const int N_MAX = 100005;
const int M_MAX = 5 * N_MAX;
int N, M;
vector<int> g[N_MAX];
pair<int, int> e[N_MAX];
bitset<M_MAX> used;
void read() {
in >> N >> M;
for (int i = 1; i <= M; ++i) {
in >> e[i].first >> e[i].second;
g[e[i].first].push_back(i);
g[e[i].second].push_back(i);
}
}
bool eulerian() {
for (int i = 1; i <= N; ++i)
if (g[i].size() % 2)
return false;
return true;
}
void solve() {
vector<int> st;
st.push_back(1);
while (!st.empty()) {
int node = st.back();
if (!g[node].empty()) {
int edge = g[node].back();
g[node].pop_back();
if (!used[edge]) {
used[edge] = true;
if (e[edge].first != node)
st.push_back(e[edge].first);
else
st.push_back(e[edge].second);
}
} else {
if (st.size() > 1)
out << node << ' ';
st.pop_back();
}
}
}
int main() {
read();
if (!eulerian()) {
out << -1;
return 0;
}
solve();
}