Pagini recente » Cod sursa (job #1593518) | Cod sursa (job #2675981) | Cod sursa (job #1570494) | Cod sursa (job #409846) | Cod sursa (job #2079647)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
#define limn 100010
#define limm 500010
typedef vector <int> :: iterator iter;
vector <int> G[limn];
int viz[limn], d[limn], st[limm];
void dfs (int nod)
{
viz[nod]=1;
for (iter it=G[nod].begin(); it!=G[nod].end(); it++)
if (!viz[*it])
dfs (*it);
}
int main()
{
int n,m,x,y,ok,i,dr,nod,v;
fin>>n>>m;
while (m--)
{
fin>>x>>y;
d[x]++;
d[y]++;
G[x].push_back(y);
G[y].push_back(x);
}
ok=1;
for (i=1; i<=n; i++)
if (d[i]%2==1)
ok=0;
dfs (1);
for (i=1; i<=n; i++)
if (!viz[i])
ok=0;
if (ok==0)
{
fout<<"-1\n";
return 0;
}
dr=0;
st[++dr]=1;
while (dr)
{
nod=st[dr];
if (G[nod].size())
{
v=G[nod][G[nod].size()-1];
for (iter it=G[v].begin(); it!=G[v].end(); it++)
if (*it==nod)
{
G[v].erase(it);
break;
}
G[nod].pop_back();
st[++dr]=v;
continue;
}
if (dr!=1)
fout<<nod<<" ";
dr--;
}
return 0;
}