Pagini recente » Cod sursa (job #1600545) | Cod sursa (job #2208244) | Cod sursa (job #2148006) | Cod sursa (job #1431434) | Cod sursa (job #755964)
Cod sursa(job #755964)
#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;
vector<int> lis[NRMAX];
stack<int> sol;
void read();
void conex();
void write();
void solve();
void dfs();
int main()
{
read();
conex();
solve();
write();
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()
{
int aux=1,p=lis[1].back();
while (lis[p].size()>0)
{
sol.push(p);
lis[aux].pop_back();
for (int it=0;it<lis[p].size();it++)
if (lis[p][it]==aux)
{lis[p].erase(lis[p].begin()+it);break;}
aux=p;
if (lis[p].size()==0) break;
else p=lis[p].back();
}
}
void write()
{
while (!sol.empty())
{
g<<sol.top()<<' ';
sol.pop();
}
g<<'\n';
}