Pagini recente » Cod sursa (job #2797982) | Cod sursa (job #2561616) | Cod sursa (job #3135597) | Cod sursa (job #2958561) | Cod sursa (job #2576259)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fi("ciclueuler.in");
ofstream fo("ciclueuler.out");
const int NMAX=1e5+5;
int n,m,x,y,VIZ[NMAX*5],edge,nod,ok;
vector <pair<int,int>> V[NMAX];
vector <int> sol;
stack <int> curr;
int main()
{
fi>>n>>m;
for(int i=1;i<=m;i++)
{
fi>>x>>y;
V[x].push_back({y,i});
V[y].push_back({x,i});
}
for(int i=1;i<=n;i++)
if(V[i].size()%2)
{
fo<<"-1\n";
return 0;
}
edge=m;
curr.push(1);
while(!curr.empty())
{
nod=curr.top();
while(!V[nod].empty() && VIZ[V[nod].back().second])
V[nod].pop_back();
if(!V[nod].empty())
{
y=V[nod].back().first;
VIZ[V[nod].back().second]=1;
V[nod].pop_back();
edge--;
curr.push(y);
}
else
{
sol.push_back(nod);
curr.pop();
}
}
sol.pop_back();
for(auto x:sol)
fo<<x<<" ";
fi.close();
fo.close();
return 0;
}