Pagini recente » Cod sursa (job #2347030) | Cod sursa (job #2835878) | Cod sursa (job #832141) | Cod sursa (job #2677222) | Cod sursa (job #3001493)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int DIM = 100010;
const int EDGE_DIM = 500010;
int n, m, x, y;
int deg[DIM];
vector<pair<int, int>> l[DIM];
vector<int> sol;
stack<int> st;
bool vis[EDGE_DIM];
int main() {
fin >> n >> m;
for (int i = 1; i <= m; i++) {
fin >> x >> y;
l[x].push_back(make_pair(i, y));
l[y].push_back(make_pair(i, x));
deg[x]++, deg[y]++;
}
for (int i = 1; i <= n; i++) {
if (deg[i] % 2 != 0) {
fout << -1;
return 0;
}
}
st.push(1);
while (!st.empty()) {
int node = st.top();
if (deg[node] == 0) {
st.pop();
sol.push_back(node);
continue;
}
for (auto adjElem : l[node]) {
int edge = adjElem.first;
int adjNode = adjElem.second;
if (!vis[edge]) {
vis[edge] = true;
st.push(adjNode);
deg[node]--, deg[adjNode]--;
break;
}
}
}
if (sol.size() != m + 1) {
fout << -1;
return 0;
}
for (int i = 0; i < sol.size() - 1; i++)
fout << sol[i] << ' ';
return 0;
}