Pagini recente » Cod sursa (job #419369) | Cod sursa (job #2759193) | Cod sursa (job #2618455) | Cod sursa (job #3162954) | Cod sursa (job #2715275)
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
struct Edge
{
int dest, poz;
};
vector <Edge> v[100005];
int entered[100005];
bool taken[500005];
int main()
{
int N, M;
fin >> N >> M;
stack <int> st;
for(int i = 1; i <= M; i++)
{
int x, y;
fin >> x >> y;
v[x].push_back({y, i});
v[y].push_back({x, i});
}
st.push(1);
vector <int> ans;
for(int i = 1; i <= N; i++)
if((int)v[i].size() % 2 == 1)
{
fout << -1 << '\n';
return 0;
}
while(!st.empty())
{
int node = st.top();
if(entered[node] < (int)v[node].size())
{
int dest = v[node][entered[node]].dest;
int poz = v[node][entered[node]].poz;
entered[node]++;
if(taken[poz] == 1)
continue;
taken[poz] = 1;
st.push(dest);
}
else
{
st.pop();
ans.push_back(node);
}
}
reverse(ans.begin(), ans.end());
for(int i = 0; i < (int)ans.size() - 1; i++)
fout << ans[i] << " ";
return 0;
}