Pagini recente » Cod sursa (job #2130940) | Cod sursa (job #1704032) | Cod sursa (job #2006465) | Cod sursa (job #2158768) | Cod sursa (job #758238)
Cod sursa(job #758238)
#include <fstream>
#include <vector>
#include <stack>
#include <queue>
#include <stdlib.h>
#define NRMAX 100001
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int viz[NRMAX],n,m,pp[NRMAX];
vector<int> lis[NRMAX];
stack<int> sol;
void read();
void conex();
void solve();
void dfs();
int main()
{
read();
conex();
solve();
f.close();g.close();
return 0;
}
void read()
{
f>>n>>m;
for (int i=1;i<=m;i++)
{
int l,c;f>>l>>c;
lis[l].push_back(c);
lis[c].push_back(l);
}
}
void conex()
{
dfs();
for (int i=1;i<=n;i++)
if (viz[i]==0 || lis[i].size()%2==1)
{g<<"-1"<<'\n';f.close();g.close();exit(0);}
}
void dfs()
{
queue<int>que;
que.push(1);
while (!que.empty())
{
int aux=que.front();que.pop();
for (int i=0;i<lis[aux].size();i++)
if (viz[lis[aux][i]]==0)
{
viz[lis[aux][i]]=1;
que.push(lis[aux][i]);
}
}
}
void solve()
{
sol.push(1);int nr=0;
while (sol.size()>0)
{
int aux=sol.top();
if (lis[aux].size()==0)
{if (nr<m) g<<aux<<' ',nr++;sol.pop();}
else
{
int val=lis[aux][0];lis[aux].erase(lis[aux].begin());
for (int it=0;it<lis[val].size();it++)
if (lis[val][it]==aux)
{
lis[val].erase(lis[val].begin()+it);
break;
}
sol.push(val);
}
}
}