Pagini recente » Cod sursa (job #2872687) | Cod sursa (job #1576301) | Cod sursa (job #769024) | Cod sursa (job #2626713) | Cod sursa (job #2073081)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
struct nod{
int x,nrmuchie;
};
vector <nod> v[1000001];
stack <int> stiva;
int n,m,x,y,viz[100001],sol[500005],k;
bool muchie[500005];
void dfs (int x)
{
viz[x]=1;
for(int i=0;i<v[x].size();i++)
{
int y=v[x][i].x;
if(viz[y]==0)
dfs(y);
}
}
void ciclueulerian(int x)
{
stiva.push(x);
while(!stiva.empty())
{
x=stiva.top();
while(v[x].size()>0 && muchie[v[x].back().nrmuchie]==1)
{
v[x].pop_back();
}
if(v[x].size()>0)
{
y=v[x].back().x;
stiva.push(y);
muchie[v[x].back().nrmuchie]=1;
}
else
{
sol[++k]=x;
stiva.pop();
}
}
}
int main ()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>x>>y;
v[x].push_back({y,i});
v[y].push_back({x,i});
}
dfs(1);
for(int i=1;i<=n;i++)
{
if(v[i].size()%2==1||viz[i]==0)
{
cout<<-1;
return 0;
}
}
ciclueulerian(1);
for(int i=1;i<k;i++)
cout<<sol[i]<<" ";
return 0;
}